Форум » [x]Harbour » Перехожу с Clipper 5.2e на Harbour, список вопросов от "новичка" » Ответить

Перехожу с Clipper 5.2e на Harbour, список вопросов от "новичка"

Sergy: Добрый день, уважаемые коллеги. Большое спасибо за море справочной информации по переходу, но нужно ещё пнуть меня в нужном направлении. Итак, установил Harbour 3.0 + BCC 5.5.1 ==>> 3.2.0 +minGW скомпилировал и запустил традиционный "Hello, world!" Дело перешло к проекту, из-за которого собственно и речь. Компилируется что через hbmk2, что самим харбором - без ошибок, всего с парой предупреждений, что меня немало удивило. Возникли ошибки на этапе линковки: [more]Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_HB_FUN_ENVPARAM' referenced from D:\HB\TRADE100.OBJ Error: Unresolved external '_HB_FUN_INKEYTRAP' referenced from D:\HB\TRADE226.OBJ Error: Unresolved external '_HB_FUN_DISKFREE' referenced from D:\HB\TRADE222.OBJ Error: Unresolved external '_HB_FUN_DISKTOTAL' referenced from D:\HB\TRADE222.OBJ Error: Unresolved external '_HB_FUN_BIOSDATE' referenced from D:\HB\TRADE.OBJ Error: Unresolved external '_HB_FUN_FT_ONTICK' referenced from D:\HB\TRADE.OBJ Error: Unresolved external '_HB_FUN_FT_ONIDLE' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_FT_IAMIDLE' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_TRAPANYKEY' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_KEYSEND' referenced from D:\HB\TRADE200.OBJ 1) Так понимаю, это ошибки из-за того, что не находятся некоторые функции из активно используемых CT3/Nanforum Toolkit ? Что делать с ними ? Отказываться ? Или есть заменители ? Error: Unresolved external '_HB_FUN_STACKFREE' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLILOCUSE' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLILOCAVL' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLILOCTOT' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLISTCUSE' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLISTCAVL' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLISTCTOT' referenced from D:\HB\TRADE200.OBJ 2) Это - ошибки из-за вызовов встроенных в Blinker функций, без них легко обойтись в принципе... Error: Unresolved external '_HB_FUN_STRNUM2ARRAY' referenced from D:\HB\TRADE208.OBJ Error: Unresolved external '_HB_FUN_CMJS_EXTRACTPARAMS' referenced from D:\HB\TRADE206.OBJ Error: Unresolved external '_HB_FUN_SELECTSTOCKS' referenced from D:\HB\TRADE220.OBJ Error: Unresolved external '_HB_FUN_APPLYSERTCHAGES' referenced from D:\HB\TRADE221.OBJ Error: Unresolved external '_HB_FUN_APPLYCARGOCHAGES' referenced from D:\HB\TRADE221.OBJ Error: Unresolved external '_HB_FUN_APPLYPRICECHAGES' referenced from D:\HB\TRADE221.OBJ 3) А вот это - самое странное - это мои функции, причем некоторые из них вызываются многократно из других модулей. Например ApplyCargoChanges является STATIC в самом модуле TRADE221 - почему линковщик ее не видит, наряду с парой Apply... других ? SelectStocks активно используется в других модулях - но там линкер почему-то ошибок не видит... [/more] Help, please - что делать и куды бечь ?

Ответов - 285, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

azoo: По inkeytrap() см. ветку http://clipper.borda.ru/?1-4-0-00000853-000-0-0-1369379704

Sergy: azoo пишет: По inkeytrap() см. ветку Спасибо. Пригодилось.

Sergy: Не получается подружить русский язык и файловую систему. Например: [pre2] FUNC Main() REQUEST HB_LANG_RU866 REQUEST HB_CODEPAGE_RU866 HB_LANGSELECT("RU866") HB_CDPSELECT("RU866") ? File("текст.!") QUIT RETURN [/pre2] Всегда дает результат .F. Файл разумеется есть, лежит рядом с exe. Если переименовать в латиницу - результат File("text.!") сразу .T. Команда RUN("@echo --- Привет --- ") дает кракозябры на экране. В hbp указал -DHB_LANG_DEFAULT=RU866 -DHB_CODEPAGE_DEFAULT=RU866 Что я еще забыл переключить в настройках ?


Pasha: Есть 2 способа решения этого вопроса: 1. Транслировать имена файлов из cp866 в cp1251 2. Добавить в конец модуля такую функцию: #pragma BEGINDUMP #include "windows.h" HB_FUNC_STATIC( SETFILEAPIS ) // Имена файлов в кодировке OEM { SetFileApisToOEM(); } #pragma ENDDUMP и вызвать ее при старте программы

Sergy: Pasha пишет: Есть 2 способа решения этого вопроса: 1. Транслировать имена файлов из cp866 в cp1251 Переделывать всю программу, искать вызовы файловых функций (а там во всех местах - и FILE() и DIRECTORY() и тд и тп) ... муторно очень... 2. Добавить в конец модуля такую функцию: Добавил. RUN("@echo --- Привет ---") теперь пишет нормально, а File() все равно дает .F.

Sergy: Попробовал даже так: sx := "абв.dbf" sx := HB_TRANSLATE(sx,"RU866","RU1251") ? File(sx) все равно дает .F.

Andrey: Попробуй так: FUNC Main() REQUEST HB_LANG_RU866 REQUEST HB_CODEPAGE_RU866 HB_LANGSELECT("RU866") HB_CDPSELECT("RU866") sx := "абв.dbf" sx := HB_ANSITOOEM(sx) ? File(sx)

Sergy: Andrey пишет: Попробуй так: ... sx := HB_ANSITOOEM(sx) Попробовал. FALSE Поставил наоборот - HB_OEMTOANSI(sx) - заработало. Блин... этож сколько переписывать придется... просто ппц... Неужели нет вариантов ???

Петр: Sergy пишет: Блин... этож сколько переписывать придется... просто ппц... Неужели нет вариантов ??? Лично у меня FUNC Main() REQUEST HB_LANG_RU866 REQUEST HB_CODEPAGE_RU866 HB_LANGSELECT("RU866") HB_CDPSELECT("RU866") ? File("текст.!") QUIT RETURN показало .T. если исходник в 866 странице, ну и .F. если в 1251

Sergy: Исходник ведь клипперовский, конечно он в 866 странице... Базы данных, все сообщения - все работает нормально. А вот с файловой системой какая-то непонятка...

Петр: А какая ось, как запускаете программу, что показывает chcp?

Sergy: Петр пишет: А какая ось, как запускаете программу, что показывает chcp? На домашнем компе - XP, запускаю программу из под Far, chcp показывает 866 На работе - сервер 2003 SR3, остальное тоже самое - и из под Far и из проводника тоже самое...

Петр: Ну не знаю, Win 7, Far 3.0 build 3249, active code page 866 .T.

petr707: proc main Local cfname // set name before SetFileApis - wrong cfname:="тест.!" strfile("1",cfname,.f.) ? file(cfname) SetFileApis() ? file(cfname) inkey(100) // set name after SetFileApis - right cfname:="тест.!" strfile("2",cfname,.f.) ? file(cfname) return #pragma BEGINDUMP #include "windows.h" HB_FUNC_STATIC( SETFILEAPIS ) // { SetFileApisToOEM(); } #pragma ENDDUMP

Sergy: Петр пишет: Ну не знаю, Win 7, Far 3.0 build 3249, active code page 866 .T.

Sergy: petr707 пишет: proc main Local cfname // set name before SetFileApis - wrong cfname:="тест.!" strfile("1",cfname,.f.) ? file(cfname) SetFileApis() ? file(cfname) inkey(100) // set name after SetFileApis - right cfname:="тест.!" strfile("2",cfname,.f.) ? file(cfname) return #pragma BEGINDUMP #include "windows.h" HB_FUNC_STATIC( SETFILEAPIS ) // { SetFileApisToOEM(); } #pragma ENDDUMP Прикольно. У меня получилось .T. .T. .T. НО имя файла в?бв.! Компилировал припомощи hbp следующего содержания (скопирован с проекта) d:\harbour\contrib\hbnf\hbnf.hbc d:\harbour\contrib\hbct\hbct.hbc d:\harbour\contrib\hbwin\hbwin.hbc d:\harbour\contrib\hbblink\hbblink.hbc -lhbcpage.lib -inc -run -LD:\Harbour\lib\win\bcc -DHB_LANG_DEFAULT=RU866 -DHB_CODEPAGE_DEFAULT=RU866 -prgflag=/v lang_test2.prg Ваще ниче не понимаю...

petr707: Удалите все файлы, и перезапустите ,старый Ваш файл тест.! картинку портит Должно быть два файла в?бв.! ( содержимое="1") и тест.! (содержимое="2") proc main REQUEST HB_LANG_RU866 REQUEST HB_CODEPAGE_RU866 HB_LANGSELECT("RU866") HB_CDPSELECT("RU866") // set name before SetFileApis - wrong cfname:="тест.!" strfile("1",cfname,.f.) ? file(cfname) SetFileApis() ? file(cfname) inkey(100) // set name after SetFileApis - right cfname:="тест.!" strfile("2",cfname,.f.) ? file(cfname) return #pragma BEGINDUMP #include "windows.h" HB_FUNC_STATIC( SETFILEAPIS ) // { SetFileApisToOEM(); } #pragma ENDDUMP

Sergy: Вот такой пример: proc main Local cfname // set name before SetFileApis - wrong cfname:="тест1.!" strfile("1",cfname) ? file(cfname) SetFileApis() // set name after SetFileApis - right cfname:="тест2.!" strfile("2",cfname) ? file(cfname) return #pragma BEGINDUMP #include "windows.h" HB_FUNC_STATIC( SETFILEAPIS ) // { SetFileApisToOEM(); } #pragma ENDDUMP дает .T. .T. и два файла: в?бв1.! и в?бв2.!

Sergy: почти синхронно ответили... ща попробую Ваш пример

petr707: Не работает SetFileApis()



полная версия страницы