Форум » [x]Harbour » Есть большой проект на Clipper 5.2 Как перейти на Harbour » Ответить

Есть большой проект на Clipper 5.2 Как перейти на Harbour

ttan34: Описание <Harbour для начинающих> и <Harbour шаг за шагом> не описывает переход существующих исходников (10 файлов prg и 3 Ch) на желанный Harbour. Получилось все установить, работают указанные тесты. При компиляции своих файлов из bat-файла - нет EXE файла но и ошибок нет! @set HB_INSTALL=C:\hb30 %HB_INSTALL%\bin\harbour f1.prg -n -i%HB_INSTALL%\include,c:\Project .................... %HB_INSTALL%\bin\harbour f10.prg -n -i%HB_INSTALL%\include,c:\Project c:\borland\bcc55\bin\bcc32 -O2 -d -I%HB_INSTALL%\include -L%HB_INSTALL%\lib f1.c f2.c f3 ...f10 hbdebug.lib hbvm.lib hbrtl.lib gtwin.lib hbcpage.lib hblang.lib hbrdd.lib hbmacro.lib hbpp.lib rddntx.lib rddcdx.lib rddfpt.lib hbsix.lib hbcommon.lib hbct.lib Что не ТАК? Может где-то описаны шаги по переходу с CLIPPER? Спасибо

Ответов - 13

Pasha: Если нет результата сборки (файла exe) - значит, при сборке возникли какие-то ошибки, или на этапе компиляции, или на этапе линковки. Надо проанализировать лог компилятора и линкера, и выяснить, что это за ошибки.

Dima: посмотри еще http://clipper.borda.ru/?1-4-40-00000884-000-0-0-1382528987

Andrey: ttan34 пишет: Может где-то описаны шаги по переходу с CLIPPER? Читай раздел http://clipper.borda.ru/?0-6


ttan34: Перехожу на Harbor, после укорачивания некоторых переменных уже вхожу в проект, даже вижу все на русском (спасибо этому форуму). Но есть загвоздка. Подскажите, каким образом Harbor указать условную трансляцию. В Clipper в .rmk файле было так: .prg.obj: CLIPPER $< /M/A/DRTM=2/O$@ и в .prg все работает по #ifdef RTM #include "RTM.ch" #endif После перехода на Harbor эта конструкция не работает.

Pasha: Харбор обрабатывает команду препроцессора #ifdef точно так же, как и Клиппер. И параметр компилятора /DRTM=2 точно такой же. Надо его просто задать. Если для сборки используется hbmk2, то это делается командой скрипта *.hbp: -prgflag=-DRTM=2

ttan34: Спасибо за быструю-скорую помощь: -prgflag=-DRTM=2 помог, теперь еще ближе к тому, что работало под CLIPPER. Следующая проблема - русская буква в поле dbf файла. В одной таблице есть поля, которые содержат русскую букву, например, lbl_Б и т.п. Не работает конструкция чтения из БД такого поля по &с. Например, поле формируется налету, MASKLB - строка с русскими буквами: FOR i=1 TO LEN(MASKLB) c := "lbl_"+SUBSTR(MASKLB,i,1) AADD(str, &c) NEXT Дает Error BASE/1449 Syntax error: & . CLIPPER это спокойно пережевывал. Чтение полей без русских букв идет нормально. Неужели придется переделывать?..

Pasha: Переделывать придется, но немного. Этот код можно заменить на такой: FOR i=1 TO LEN(MASKLB) AADD(str, FieldGet(FieldPos("lbl_"+SUBSTR(MASKLB,i,1)))) NEXT Кстати, он и выполняться будет быстрее. И еще: для меня сюрприз, что клиппер понимал русские имена полей. Может я просто не наткнулся на эту фичу в свое время.

ttan34: Все получилось, и самое главное - ради чего все делалось - теперь нет отвалов при многократном вызове больших массивов. СПАСИБО ЗА СОВЕТ перейти на HARBOUR!!!

ttan34: Ну, оказывается, еще не все работает по-прежнему. В CLIPPERе функция CMONTH() выдавала наименование месяца по-русски, Harbour дает по-английски. Что делать - писать свою или есть другая функция?

Pasha: При старте программы надо задать настройку на русский язык: REQUEST HB_LANG_RU866 hb_LangSelect( "RU866" )

ttan34: Еще раз проблема с русской буквой в поле dbf файла. В одной таблице есть поля, которые содержат русскую букву, например, lbl_Б и т.п. Как умудриться записать данные в такую таблицу? Например, поле формируется налету, MASKLB - строка с русскими буквами: В CLIPPERе было так (здесь для одной записи переписываются несколько полей): FOR i=1 TO LEN(MASKLB) c :="lbl_"+SUBSTR(MASKLB,i,1) REPLACE &c WITH cbuf[j][ci++] NEXT Дает Error BASE/1449 Syntax error: & . CLIPPER это спокойно пережевывал. Что делать? REPLACE lbl_Б WITH cbuf[j][ci++] // тоже не работает! Может есть функция записи в БД, где можно было бы записывать в поле по номеру позиции FieldPos() ?

Andrey: FIELDPUT(FieldPos("?????")) Читай матчасть... ttan34 пишет: В одной таблице есть поля, которые содержат русскую букву, например, lbl_Б и т.п. Исправляй базу (уходи от русских букв в наименование полей), иначе потом будут проблемы.

ttan34: Получилось! Спасибо. Проект долгий, уйти от русских букв в наименование полей - переделать почти все, а у меня простое сопровождение.



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