On-line: Andrey, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 3
Зарегистрирован: 25.03.10
ссылка на сообщение  Отправлено: 25.03.10 17:59. Заголовок: Работа с флопом


Задача это уже обсуждалась на форуме в разделе xHarbour - надо опередить реакцию ОС на отсутствие флопа, задавала этот вопрос Lena. Но попытка воспользоваться рецептом оказалась неудачной. На использование SetErrorMode, у меня отвечают: Unresolved external '_HB_FUN_SETERRORMODE'. Как я понял, мы работаем из разных точек отсчета: Lena использует xHarbour, а у меня сборка, которую выкладывает Филатов. Подскажите как поступить! спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 8 [только новые]


постоянный участник


Пост N: 851
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 25.03.10 18:23. Заголовок: Библиотека hbwin - w..


Библиотека hbwin - wapi_SetErrorMode

Спасибо: 0 
ПрофильЦитата Ответить
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



Спасибо: 0 
ПрофильЦитата Ответить



Пост 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'
Подскажите! спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
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



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 5
Зарегистрирован: 25.03.10
ссылка на сообщение  Отправлено: 29.03.10 14:55. Заголовок: Спасибо! Оказалось д..


Спасибо! Оказалось достаточно воспользоваться DiskChange(), которая прекрасно работает из Harbour, и чувствительна к отсутствию дискеты. Одно непонятно, почему работают DiskName(), DiskChange(); а вот DISKREADY() работать не хочет. Может я чего-то не понимаю?


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 28
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.03.10 15:03. Заголовок: al-sklif пишет: Одн..


al-sklif пишет:

 цитата:
Одно непонятно, почему работают DiskName(), DiskChange(); а вот DISKREADY() работать не хочет.


Все просто: для этой функции в библиотеке HBCT Харбора определена заглушка, которая ничего не делает

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 6
Зарегистрирован: 25.03.10
ссылка на сообщение  Отправлено: 29.03.10 15:25. Заголовок: За что же ее (функци..


За что же ее (функцию) так? Чего она плохого сделала?. А из xHarbour она работает?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 353
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 29.03.10 15:27. Заголовок: al-sklif пишет: За ..


al-sklif пишет:

 цитата:
За что же ее (функцию) так? Чего она плохого сделала?


Ничего она не сделала. Просто Harbour - мультиплатформенный проект. Все функции, которые в нем есть, должны работать не только под Windows.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 126
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет