Форум » [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

Dima: Юзай Harbour 3.2 там Hbmk2 чутка умнее и пишет какие библы нужно прилинковать. Хотя может это есть и в 3.0 не знаю так как сразу перелез с 2.0 на 3.2

Sergy: Только вчера поставил Harbour и BCC рядом со старым добрым 5.2e - голова кругом идет... нашел 3.0 - а вот 3.2 где взять ???

Dima: Sergy пишет: голова кругом идет И у меня так было ;) На вскидку не хватает библиотек HBCT , HBNF , прилинкуй их. Если и после этого какие то функции не будут находиться тогда поищи их в ChangeLog.txt или поиском по маске файлов из CONTRIB Все это я делаю (о поиске я) в FAR MANAGER Насчет функций Blinker не знаю ,возможно что то и есть (аналоги) но далеко не все думаю и надо разбираться в каждом отдельном случае. Sergy пишет: а вот 3.2 где взять ??? тут http://clipper.borda.ru/?1-4-0-00000840-000-0-0-1375721378 по линку http://github.com/harbour/core/archive/master.zip


Sergy: HBCT, HBNF указываю жестко в строке компилятора, путь к ним тоже прописан. В каталоге harbour\lib\win\bcc hbct.lib и hbnf.lib точно есть... В папке CONTRIB нашел "непонятные" файлы HBCT.HBC и HBNF.HBC размером по 122 байта каждый - может их куда еще нужно засунуть ?

Dima: Sergy пишет: В папке CONTRIB нашел "непонятные" файлы HBCT.HBC и HBNF.HBC размером по 122 байта каждый - может их куда еще нужно засунуть ? Их и надо линковать вместо HBNF.LIB и HBCT.LIB Совет: юзай HBMK2 и файл проекта HBP Пример (часть почикал) [pre2] C:\hb32mingw\contrib\hbct\hbct.hbc C:\hb32mingw\contrib\hbtip\hbtip.hbc C:\hb32mingw\contrib\xhb\xhb.hbc C:\hb32mingw\contrib\hbnf\hbnf.hbc C:\hb32mingw\contrib\hbmemio\hbmemio.hbc C:\hb32mingw\contrib\gtwvg\gtwvg.hbc C:\hb32mingw\contrib\hbwin\hbwin.hbc C:\hb32mingw\contrib\hbxpp\hbxpp.hbc C:\hb32mingw\contrib\hbmisc\hbmisc.hbc C:\hb32mingw\contrib\rddads\rddads.hbc -lace32 -LC:\MinGW\lib\ -liphlpapi -compr=max -workdir=obj -owinSklad.exe -inc #-mt #-gtwin #-run #-std -gui fix\*.c fix\*.prg cfunc\*.prg .............. sklad.prg rddsys.prg tool\*.prg sklad.rc [/pre2] Собираю все вот таким батником [pre2] set path=C:\MinGW\bin\ c:\hb32mingw\bin\hbmk2 sklad.hbp [/pre2] У тебя он будет свой да и компилятор тоже так как в примере у меня MINGW

SergKis: Sergy пишет:Help, please - что делать и куды бечь ? Такой штукой получите оглавления всех lib: for %%a in ( *.lib ) DO c:\bk8\bcc\bin\TLIB.EXE %%a , %%a.txt Ищите в огл. функции, если найдена подключайте lib к проекту - нет, то вероятно ее придется переписывать.

Sergy: Dima пишет: Их и надо линковать вместо HBNF.LIB и HBCT.LIB Совет: юзай HBMK2 и файл проекта HBP Пример (часть почикал) Большое спасибо за подсказу, сделал так: d:\harbour\contrib\hbnf\hbnf.hbc d:\harbour\contrib\hbct\hbct.hbc -lhbnf -lhbct -LD:\Harbour\lib\win\bcc -workdir=OBJ -otradewin.exe trade.prg trade100.prg trade200.prg trade201.prg trade202.prg ... trade499.prg По сути ничего не поменялось... не находит функций...

Dima: Sergy пишет: -lhbnf -lhbct Это не надо так как выше есть уже HBC А какие функции не находит ?

Sergy: SergKis пишет: Такой штукой получите оглавления всех lib: for %%a in ( *.lib ) DO c:\bk8\bcc\bin\TLIB.EXE %%a , %%a.txt Ищите в огл. функции, если найдена подключайте lib к проекту - нет, то вероятно ее придется переписывать. Спасибо, вот какая интересная петрушка получается с HBNF.LIB: 1) несколько функций изменили свое имя, например: DISKFREE -> DSKFREE, DISKTOTAL -> DSKSIZE... Поставлю условную компиляцию #ifdef __HARBOUR__ ... #endif 2) от части функций придется отказаться, чего уж там... 3) Функция FT_ONTICK точно есть, но возникает ошибка компоновки - как и с моими функциями... сейчас уменьшу кол-во неверных вызовов, посмотрю что да как...

Sergy: Dima пишет: Это не надо так как выше есть уже HBC А какие функции не находит ? Это "системные": Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_HB_FUN_SWPRUNCMD' referenced fr Error: Unresolved external '_HB_FUN_ENVPARAM' referenced fro Error: Unresolved external '_HB_FUN_INKEYTRAP' referenced fr Error: Unresolved external '_HB_FUN_DISKFREE' referenced fro Error: Unresolved external '_HB_FUN_DISKTOTAL' referenced fr Error: Unresolved external '_HB_FUN_BIOSDATE' referenced fro Error: Unresolved external '_HB_FUN_FT_ONIDLE' referenced fr Error: Unresolved external '_HB_FUN_TRAPANYKEY' referenced f Error: Unresolved external '_HB_FUN_KEYSEND' referenced from Это - "мои": Error: Unresolved external '_HB_FUN_STRNUM2ARRAY' referenced Error: Unresolved external '_HB_FUN_CMJS_EXTRACTPARAMS' refe Error: Unresolved external '_HB_FUN_SELECTSTOCKS' referenced Error: Unresolved external '_HB_FUN_APPLYSERTCHAGES' referen Error: Unresolved external '_HB_FUN_APPLYCARGOCHAGES' refere Error: Unresolved external '_HB_FUN_APPLYPRICECHAGES' refere

Dima: Sergy пишет: Error: Unresolved external '_HB_FUN_SWPRUNCMD' referenced fr Давай по одной ;) Вместо ее можно юзать hb_processrun EXECANDWAIT WAPI_ShellExecute и что то еще уже не помню ;)

Dima: Sergy пишет: Это - "мои": тебе и карты в руки ! сам же писал.

Sergy: Dima пишет: Давай по одной ;) Вместо ее можно юзать hb_processrun EXECANDWAIT WAPI_ShellExecute и что то еще уже не помню ;) Давай... Подключил HBBLINK, ошибка со SWPRUNCMD ушла. Заменил DISKTOTAL на DSKSIZE - теперь ошибка - не может найти функцию DSKSIZE. По "своим" функциям, разумеется, вопросы будут в последнюю очередь...

Sergy: Вопрос с ENVPARAM решил надыбанным "неизвестно где" исходником: #pragma BEGINDUMP #include <windows.h> #include <tchar.h> #include <stdio.h> #include <hbapi.h> HB_FUNC( ENVPARAM ) { LPTSTR lpszVariable; LPTCH lpvEnv; LPTSTR pszBuffer = NULL; int iLastLen = 0; int pos =0; // Get a pointer to the environment block. lpvEnv = GetEnvironmentStrings(); // If the returned pointer is NULL, exit. if (lpvEnv == NULL) { printf("GetEnvironmentStrings failed (%d)\n", GetLastError()); return ; } // Variable strings are separated by NULL byte, and the block is // terminated by a NULL byte. lpszVariable = (LPTSTR) lpvEnv; while (*lpszVariable) { int iLen = lstrlen( lpszVariable ); pszBuffer = realloc( pszBuffer, iLastLen + iLen + 2 ); memcpy( pszBuffer+iLastLen, lpszVariable, iLen ); memcpy( pszBuffer+iLastLen+iLen, "\r\n", 2 ); iLastLen += iLen + 2; lpszVariable += lstrlen(lpszVariable) + 1; } FreeEnvironmentStrings(lpvEnv); hb_retc( pszBuffer ); } #pragma ENDDUMP соотв. остаются: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_HB_FUN_INKEYTRAP' referenced fr Error: Unresolved external '_HB_FUN_DSKFREE' referenced from Error: Unresolved external '_HB_FUN_DSKSIZE' referenced from Error: Unresolved external '_HB_FUN_BIOSDATE' referenced fro Error: Unresolved external '_HB_FUN_FT_ONIDLE' referenced fr Error: Unresolved external '_HB_FUN_TRAPANYKEY' referenced f Error: Unresolved external '_HB_FUN_KEYSEND' referenced from

Dima: Dima пишет: поищи их в ChangeLog.txt а так же поиском на форуме

Sergy: Dima пишет: поищи их в ChangeLog.txt а так же поиском на форуме Бинго! Так разобрался с DISKFREE и DISKTOTAL - оказывается, они заменяются на вызовы HB_DISKSPACE(d, HB_DISK_FREE) и тп. При помощи условной компиляции пока отказался от некоторых системных функций. Со своими функциями походу тоже ясно - ошибка с длинными именами - Clipper все что длинее 10 знаков игнорирует, а тут - строго...

Sergy: Запустил ! Разобрался с кодовой страницей, убрал вызов FILESMAX() Вопрос: Использую NTX, в некоторых редких случаях требуется, чтoбы вместо расширений *.DBF и *.NTX были немного другие, напрмер: *.XDB, *.XNT - так я отличаю "архивные" таблицы и действующие, чтобы их не копировать при бэкапе. Harbour этого не любит ? Вылетает: Unrecoverable error 9108: hb_ntxIndexUnLockRead: unlock error. Вот на таком коде: USE (cDir+cAlias+cExt) INDEX (cDir+cAlias+cNtx) READONLY NEW

Andrey: Sergy пишет: Error: Unresolved external '_HB_FUN_KEYSEND' referenced from Это CT.LIB Я отказался от неё.

Dima: Andrey пишет: Я отказался от неё. и я Sergy пишет: Использую NTX Тяжелый случай. Тяжело и громоздко. Не надо его юзать. CDX самое то или IDX (CDX) под ADS или LetoDB (CDX) Dima пишет: CDX самое то Но там могут быть свои приколы.

Dima: Sergy пишет: (cDir+cAlias+cExt) Выведи это дело в ? cDir+cAlias+cExt и глянь что кажет , возможно твой косяк



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