Автор | Сообщение |
|
| |
Пост N: 3
Зарегистрирован: 25.03.10
|
|
Отправлено: 25.03.10 17:59. Заголовок: Работа с флопом
Задача это уже обсуждалась на форуме в разделе xHarbour - надо опередить реакцию ОС на отсутствие флопа, задавала этот вопрос Lena. Но попытка воспользоваться рецептом оказалась неудачной. На использование SetErrorMode, у меня отвечают: Unresolved external '_HB_FUN_SETERRORMODE'. Как я понял, мы работаем из разных точек отсчета: Lena использует xHarbour, а у меня сборка, которую выкладывает Филатов. Подскажите как поступить! спасибо!
|
|
|
Ответов - 8
[только новые]
|
|
|
| постоянный участник
|
Пост N: 851
Зарегистрирован: 09.10.06
|
|
Отправлено: 25.03.10 18:23. Заголовок: Библиотека hbwin - w..
Библиотека hbwin - wapi_SetErrorMode
|
|
|
|
| moderator
|
Пост N: 25
Зарегистрирован: 11.02.10
|
|
Отправлено: 25.03.10 18:26. Заголовок: al-sklif пишет: Под..
al-sklif пишет: Добавьте в свой проект следующую декларацию: цитата: | DECLARE DLL_TYPE_LONG SetErrorMode( DLL_TYPE_LONG nMode ) ; IN KERNEL32.DLL |
|
|
|
|
|
| |
Пост N: 4
Зарегистрирован: 25.03.10
|
|
Отправлено: 26.03.10 10:21. Заголовок: спасибо за ответ! Де..
спасибо за ответ! Действительно перестал ругаться на SetErrorMode!!! Но!!! Оказалось, что ф-я isdisk() определяет только наличие включенного дисковода, но ей все равно есть дискета или нет. Попробовал использовать DISKREADY(), но как я понял это ф-я xHarbour, т.к. при билдинге из IDE он также кричит Unresolved external '_HB_FUN_DISKREADY', если же в настройках IDE переключить Harbour на xHarbour , то он не может работать с библиотечкой: Unable to open file 'MINIGUI.LIB' Подскажите! спасибо!
|
|
|
|
| moderator
|
Пост N: 26
Зарегистрирован: 11.02.10
|
|
Отправлено: 26.03.10 11:32. Заголовок: al-sklif пишет: Поп..
al-sklif пишет: цитата: | Попробовал использовать DISKREADY(), |
| Попробуй адаптировать под себя этот код (просто в качестве идеи ): цитата: | *----------------------------------- FUNCTION DiskReady( cDrive , lMode ) *----------------------------------- LOCAL lReturn, cDsk, cCurDsk default( @lMode , .F. ) // lMode -> True = Windows/DOS mode. If a disk is not ready, open a dialog. // False = Bios mode. If a disk is not ready donґt open a dialog. cCurDsk := DiskName() cDsk := _Drive( cDrive ) IF valtype(lMode) != "L" lMode := .F. ENDIF IF lMode // Windows/DOS access mode. xHarbour RTL. Source is in "dirdrive.c". lReturn := DiskChange( cDsk ) IF lReturn DiskChange( cCurDsk ) ENDIF ELSE // Bios access mode. xHarbour RTL. Source is in "dirdrive.c". lReturn := IsDisk( cDsk ) ENDIF RETURN ( lReturn ) *------------------------------------ FUNCTION DiskReadyW( cDrive , lMode ) *------------------------------------ LOCAL cDsk, nHd, cFile, lReturn := .F., cCurrent := DiskName() default( @lMode , .T. ) // lMode -> Windows/DOS write ready mode. Same as DiskReady(). cDsk := _Drive(cDrive) IF valtype(lMode) != "L" lMode := .T. ENDIF IF lMode IF DiskChange( cDsk ) cFile := "wwxxyyzz.xyz" nHd := FCreate( cFile , 0 ) IF nHd > 0 FClose( nHd ) FErase( cFile ) lReturn := .T. ENDIF DiskChange( cCurrent ) ENDIF ENDIF RETURN lReturn *--------------------------------* STATIC FUNCTION _Drive( cDsk ) *--------------------------------* Local cCurDisk, cDrive cDrive := cDsk cCurDisk := DiskName() if cCurDisk[-1] != ":" cCurDisk += ":" endif if empty( cDrive ) .or. ! IsAlpha( cDrive ) cDrive := cCurDisk endif cDrive := StrTran(cDrive,"/","") cDrive := StrTran(cDrive,"\","") if cDrive[-1] != ":" cDrive += ":" endif Return cDrive |
|
|
|
|
|
| |
Пост N: 5
Зарегистрирован: 25.03.10
|
|
Отправлено: 29.03.10 14:55. Заголовок: Спасибо! Оказалось д..
Спасибо! Оказалось достаточно воспользоваться DiskChange(), которая прекрасно работает из Harbour, и чувствительна к отсутствию дискеты. Одно непонятно, почему работают DiskName(), DiskChange(); а вот DISKREADY() работать не хочет. Может я чего-то не понимаю?
|
|
|
|
| moderator
|
Пост N: 28
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.03.10 15:03. Заголовок: al-sklif пишет: Одн..
al-sklif пишет: цитата: | Одно непонятно, почему работают DiskName(), DiskChange(); а вот DISKREADY() работать не хочет. |
| Все просто: для этой функции в библиотеке HBCT Харбора определена заглушка, которая ничего не делает
|
|
|
|
| |
Пост N: 6
Зарегистрирован: 25.03.10
|
|
Отправлено: 29.03.10 15:25. Заголовок: За что же ее (функци..
За что же ее (функцию) так? Чего она плохого сделала?. А из xHarbour она работает?
|
|
|
|
| постоянный участник
|
Пост N: 353
Зарегистрирован: 27.01.07
|
|
Отправлено: 29.03.10 15:27. Заголовок: al-sklif пишет: За ..
al-sklif пишет: цитата: | За что же ее (функцию) так? Чего она плохого сделала? |
| Ничего она не сделала. Просто Harbour - мультиплатформенный проект. Все функции, которые в нем есть, должны работать не только под Windows.
|
|
|
|