Форум » [x]Harbour » Перевожу Clipper-овский проект в Harbour » Ответить

Перевожу Clipper-овский проект в Harbour

mikeas: Добрый день, господа. Начал переводить проект с CLIPPERa(5.2Е) в Harbour и сразу же столкнулся с проблемой: undefined reference to `HB_FUN_TOKEN' ... и т.д. Пользуюсь инструкцией "Harbour - шаг за шагом" Александра Кресина, т.е. использую версию "harbour-3.0.0-win.exe". Поискал здесь на форуме похожую ситуацию. Нашел здесь: "unresolved external _HB_FUN_", но похоже не мой случай, до линковки дело еще не доходит. Куда копать? Подскажите, пожалуйста.

Ответов - 69, стр: 1 2 3 4 All

PSP: mikeas, скачайте свежий билд. В нем точно есть эта библа. Возможно, что и указывать на нее не придется.

petr707: Перечисляет библиотеки в папке ..\CONTRIB\ hbmk2 будет искать и найдет , в частности, файл C:\hb30\contrib\hbct\hbct.hbc с описанием, где брать библиотеку HBCT = = = = # # $Id: hbct.hbc 16259 2011-02-09 15:58:45Z vszakats $ # incpaths=. libs=${_HB_DYNPREF}${hb_name}${_HB_DYNSUFF}

mikeas: Внимательно всмотрелся в сообщения об ошибках. Увидел там имена и своих модулей. Решил, что надо собрать весь проект, "пусть он развалится" :) Сейчас занимаюсь устранением клипперовских безобразий/безалаберностей :) Их много. Это печалит. Как устраню, опять вас помучаю. Спасибо всем! Искренне рад, что не в одиночестве вожусь! И таки да, файл libhbct.a на месте. Свежий билд скачал.


petr707: есть C:\hb30\lib\win\mingw\libhbct.a - размещение

mikeas: petr707, не понял, Вашу фразу: "есть C:\hb30\lib\win\mingw\libhbct.a - размещение" поясните, пожалуйста. 1) Поправил неряшливости Клиппера 2) Поправил .bat и .hbp файлы по совету petr707 Кол-во ошибок уменьшилось до 11 штук! Похоже таких функций в Харборовской CTLIB действительно нет: `HB_FUN_CSETALL' `HB_FUN_DISKFREE' `HB_FUN_SPLITV' `HB_FUN_FILECHECK' разбираюсь с ними.

petr707: 1) Можно найти аналоги функций или близкие, например FUNction DISKFREE(cDrive) return hb_DiskSpace(cDrive,1) FUNction DISKTOTAL(cDrive) return hb_DiskSpace(cDrive,3) или поставить временные заглушки , например Function filecheck() return 1 2) Фраза про "размещение" - это просто ссылка на пусть к файлу этой библиотеки ( при стандартной инсталляции hrb 3.0) 3) Подтверждаю, что лучше сразу использовать текущий harbour 3.2.0dev , чем стабильный 3.0.0. Не придется переделывать потом. hbmk2 от 3.2 много чего больше умеет, чем hbmk2 от 3.0 и много другое чего продвинуто

mikeas: petr707, спасибо. Так и сделаю. Вопрос: а где Вы берете описания функций? Что-то не нашел :( В Mingui нашел файл: "(x)harbour.chm", но не уверен в достоверности описания, например DISKFREE() там есть.

petr707: Источников много, в том числе и здесь на форуме click here Можно смотреть в инсталляции C:\harbour\ChangeLog.txt , C:\harbour\doc\ Можно использовать в hrb3.2.0dev hbmk2.exe -find xxxxx

mikeas: Ура! Подчистил, собрал, запустил. Работает!!! Но, пока частично :( Подводит клипперовская свобода. Оказывается в Харборе параметры процедур LOCAL, а в Клиппере PRIVATE, например: procedure poisk(p1) p1:=IIF(p1=NIL,"par1",p1) PRIV p2:="par2" MyBrowse( p2 ) RETURN FUNCTION MyBrowse( oBrowse ) ? "oBrowse=", oBrowse ? "p1=", p1 RETURN NIL Харбор выдает ошибку: Error BASE/1003 Variable does not exist: P1 В Клиппере такое прокатывало. Нет ли в Компиляторе Харбора какого переключателя, чтобы считать параметры PRIVATE?

Dima: Параметры процедур и в Clipper локальные. Нужны Private используем , PARAMETERS

mikeas: О, нашел выход. Не красивый, но очень полезный. Вот так срабатывает в Харборе: procedure poisk() PARAM p1 p1:=IIF(p1=NIL,"par1",p1) PRIV p2:="par2" MyBrowse( p2 ) RETURN FUNCTION MyBrowse( oBrowse ) ? "oBrowse=", oBrowse ? "p1=", p1 RETURN NIL

mikeas: Да, точно. Многие модули у мня были без заголовков PROC/FUNC. Повставлял заголовки, ну и втиснул туда параметры не думая о последствиях. Придется заново лопатить все :(

Dima: mikeas пишет: О, нашел выход. я об этом выше и писал :)

mikeas: Да, Dima, Вы правы. Это я не внимательный :( Обнаружил очередную проблему: не работает SET SCOPE ! (Я использую SIXCDX, так исторически сложилось, но похоже в Харборе SIX кривой :( ) Поискал на сайте. Нашел аналогичную проблему, которую описывал wad1 в 2009 году. Решение: полный отказ от SIX. Придется все перепахивать на предмет замены SIX-функций "sx_..." на аналоги. Жаль. Финиш был так близок :)

Dima: mikeas пишет: Обнаружил очередную проблему: не работает SET SCOPE а так #include "dbinfo.ch" dbOrderInfo(DBOI_SCOPETOP........ dbOrderInfo(DBOI_SCOPEBOTTOM....

mikeas: Dima, сори, не понял. Мне не знакомы эти Харбор-функции. Надеюсь если отключить SIXCDX повсеместно в проекте и подключить RDDCDX, то все SCOPe-ы заработают. Или нет? Мне только останется заменить явные вызову SIX-функций на их аналоги. Вот в этом возни много будет. Или м.б. с SIXCDX можно что-то переключить, чтобы SCOPE выполнялись? Вся суть проблемы: минимизировать исправления исходного кода.

Dima: mikeas я бы проверил на простом примере для начала SCOPE c SIXCDX (сомневаюсь что он глючный) а на другом тоже самое с DBFCDX

mikeas: Это разумно, сейчас попробую.

Dima: mikeas Поздно )) [pre2] #include "dbinfo.ch" #include "hbsix.ch" Proc main Local el Request SIXCDX dbcreate("testsix",; {{"ndok","n",5,0}},"SIXCDX",.t.,"testsix") index on ndok tag test for each el in {1,1,2,2,3,3} testsix->(dbappend()) testsix->ndok:=el next testsix->(dbgotop()) testsix->(browse()) testsix->(dbOrderInfo(DBOI_SCOPETOP,,,3)) testsix->(dbOrderInfo(DBOI_SCOPEBOTTOM,,,3)) // так не работает //testsix->(sx_setscope(0,3)) //testsix->(sx_setscope(1,3)) testsix->(dbgotop()) testsix->(browse()) return [/pre2]

mikeas: Dima, спасибо. Я тоже убедился, что SIX не работает на своем примере. Убираю его нафиг. Перехожу на DBFCDX.



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