Форум » Clipper » Хочу попробовать на Harbour/xHarbour » Ответить

Хочу попробовать на Harbour/xHarbour

TakOj: В 90-х годах писал на Clipper 5.1 и вот уже лет 10 не пишу. Встретил людей, для которых когда-то сделал одну прогу, которая до сих пор пашет. Они просят переписать (и дополнить) её под Win XP. Я им ничего конкретного не пообещал. Сказал, что многое уже подзабыл и для освоения (профессионально) нового яз-а пограм-я нужно время. «Ты подумай, мы тебя не торопим» - сказали они мне и на этом мы расстались. Та случайная встреча и знакомство с вашим сайтом разбудили во мне желание вновь писать (или хотя бы переписать старые) программы. Я думаю, в моём положении, Harbour/xHarbour это то, что даст вторую жизнь моим старым программам. Благо исходники сохранились. После столь долгого перерыва в программировании прошу вашей помощи. Не откажите. Не судите строго за глупые вопросы. И так. Это мой старый bat-файл: @echo off set path=c:\clip5\bin set lib=c:\clip5\lib set include=c:\clip5\include set obj=c:\clip5\obj clipper a_1 /n /a /b clipper a_2 /n /a /b if not errorlevel 1 rtlink file a_1.obj,a_2.obj,dbfsix.obj output p_1 library dbfsix,clipper,ct150 del *.obj ____________________________ А вот что такое а_1 и а_2 a_1.prg #include "dbfsix2.ch" PROCEDURE MAIN1() SetRDD("DBFSIX") mai1() RETURN #include "мой.ch" #include "PROG_01.PRG" => mai1() #include "PROG_02.PRG" . . . #include "PROG_25.PRG" a_2.prg #include "dbfsix2.ch" PROCEDURE MAIN2() SetRDD("DBFSIX") mai2() return NIL #include "PROG_26.PRG" => mai2() #include "PROG_27.PRG" . . . #include "PROG_50.PRG" А это bat-файл для Harbour: set HB_BIN_INSTALL=d:\harbour\bin set HB_LIB_INSTALL=d:\harbour\lib\ set HB_INC_INSTALL=d:\harbour\include\ %HB_BIN_INSTALL%\harbour aer_1.prg -n -i%HB_INC_INSTALL% %HB_BIN_INSTALL%\harbour aer_2.prg -n -i%HB_INC_INSTALL% d:\borland\bcc55\bin\bcc32 -O2 -d -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% aer_1.c aer_2.c debug.lib vm.lib rtl.lib gtwin.lib lang.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib common.lib codepage.lib d:\harbour\lib\hbsix.lib с:\clip5\lib\dbfsix.lib d:\borland\bcc55\bin\ilink32 -Gn d:\radk\clip5\obj\dbfsix.obj aer_1.obj aer_2.obj, aaeerr.exe, , d:\harbour\lib\debug.lib d:\harbour\lib\lang.lib d:\harbour\lib\macro.lib d:\harbour\lib\pp.lib d:\harbour\lib\dbfntx.lib d:\harbour\lib\dbfcdx.lib d:\harbour\lib\codepage.lib d:\harbour\lib\libct.lib d:\harbour\lib\harbour-b32.lib d:\harbour\lib\rtl.lib d:\harbour\lib\hbsix.lib с:\clip5\lib\dbfsix.lib До использовиния ilink32 пример батника взят с сайта А. Кресина. После выполнения этого батника, вот что получаю: D:\>d:\harbour\bin\harbour a_1.prg -n -id:\harbour\include\ Harbour Beta build 0.99-3 Intl. Copyright 1999-2007, http://www.harbour-project.org/ Compiling 'a_1.prg'... Lines 11842, Functions/Procedures 240 Generating C source output to 'a_1.c'... Done. D:\>d:\harbour\bin\harbour a_2.prg -n -id:\harbour\include\ Harbour Beta build 0.99-3 Intl. Copyright 1999-2007, http://www.harbour-project.org/ Compiling 'a_2.prg'... Lines 4863, Functions/Procedures 86 Generating C source output to 'a_2.c'... Done. D:\>d:\borland\bcc55\bin\bcc32 -O2 -d -Id:\harbour\include\ -Ld:\harbour\lib\ a_1.c a_2.c debug.lib vm.lib rtl.lib gtwin.lib lang.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib common.lib codepage.lib d:\harbour\lib\hbsix.lib с:\clip5\lib\dbfsix.lib Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland a_1.c: a_2.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Access violation. Link terminated. D:\>d:\borland\bcc55\bin\ilink32 -Gn с:\clip5\obj\dbfsix.obj a_1.obj a_2.obj, aaeerr.exe, , d:\harbour\lib\debug.lib d:\harbour\lib\lang.lib d:\harbour\lib\macro.lib d:\harbour\lib\pp.lib d:\harbour\lib\dbfntx.lib d:\harbour\lib\dbfcdx.lib d:\harbour\lib\codepage.lib d:\harbour\lib\libct.lib d:\harbour\lib\harbour-b32.lib d:\harbour\lib\rtl.lib d:\harbour\lib\hbsix.lib d:\clip5\lib\dbfsix.lib Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Unsupported 16-bit segment(s) in module \drivers\sex\ver1-1\asm\sixdyn.asm Если я правильно понял – ему не нравится dbfsix.lib. Но я использую в своих прогах функции этой библиотеки. И мне ещё не понятно, для чего дважды (в bcc32 и ilink32)прописывать необходимые библ-ки. Что делаю неправильно? Как правильно составить батник для сборки прог-м?

Ответов - 34, стр: 1 2 All

Петр: Harbour не может использовать старые 16bit клипперные библиотеки. Придется Вам довольствоваться hbsix.lib. Почитайте документацию к ilink32 и bcc32 В Вашем случае, мне кажется, вызывать ilink32 не нужно - bcc32 сам все сделает. Что касается того как составлять батник - это зависит от стиля, вкуса, даже наличия времени - главное чтобы это работало.

TakOj: Петр пишет: В Вашем случае, мне кажется, вызывать ilink32 не нужно - bcc32 сам все сделает. Убрал ilink32. И опять: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Access violation. Link terminated. Access violation - нарушение доступа. Кого, куда? Где смотреть?

TakOj: Прошу прощения за опечатку. Там, где aer_1 и aer_2 - читать а_1 и а_2.


Andrey: Пользуйтесь xHarbour'ом - он более совместим с Клипером. В xHarbour'е есть утилита hbmake.exe - с ее помощью и соберите свой проект, не мучайтесь, утилита сама все сделает. Как с ней работать - поищите на этом форуме, здесь это обсуждалось. (строка поиска: hbmake )

Vlad04: Вместо six используй dbfcdx из поставок с xHarbour( вызовы функций только надо поменять - sx_SetTagNo(1)-> DbSetOrder(1) и т.д.) . Батник с Кресинского сайта нормально работает - им постоянно пользуюсь. Пример использования утилит rmake http://www.paritetsoft.ru/frh.htm.

TakOj: Спасибо вам - Петр, Andrej и Vlad04! Пока всё как в тумане. Буду разбираться Vlad04! Ссылка на пример использования утилит rmake выдаёт - 404 Not Found. Кому ещё есть что посоветовать, пишите. Буду очень благодарен.

TakOj: В моей проге на Clipper есть такие строки: (а) @ prow(),pcol() say jj&_i_.[i+1] (б) @ prow(),pcol() say jj&_i_.+jj&_i_.[i+1] _i_ - 1 или 2 Компилирую в xHarbour. Строка (а) проходит, а на (б) выдаёт ошибку: Error E0030 Syntax error: "parse error at 'JJ&_I_.'" Почему так и что можно сделать? В Harbour всё OK!

PSP: TakOj пишет: Ссылка на пример использования утилит rmake выдаёт - 404 Not Found Ссылка рабочая. Просто в конце стоит "точка". Нужно без нее.

TakOj: PSP пишет: Ссылка рабочая. Просто в конце стоит "точка". Нужно без нее. действительно, не заметил. Спасибо! В строке (б) предыдущего моего поста опечатка (опять). Правильно так: (б) @ prow(),pcol() say jj&_i_.+jj&_i_.[i+1] Но это всё равно не исключает ошибку.

PSP: А можно поподробней описать что такое jj, _i_, i ?

TakOj: Что-то не пойму, что происходит? При отправке сообщения передаются не то, что надо. Вот в виде рисунка

PSP: Ну, к примеру вот такое у меня нормально компилируется и выполняется.

TakOj: PSP пишет: А можно поподробней описать что такое jj, _i_, i ?

TakOj: Ошибка Error E0030 Syntax error: "parse error at 'JJ&_I_.'" выходит при компилировании в xHarbour Compiler build 0.92.0 (SimpLex). Ушла после того, как скомпилировал в xHarbour Compiler build 1.0.0 (SimpLex).

Andrey: Еле нашел то что просили: Порядок работы с HBMake под WinNT/2000/XP такой: 1) Убедится что во вкладке "Переменные среды" (Мой компьютер, свойства, дополнительно) в окружение PATH был доступ к c:\xHarbour\bin и к c:\BCC55\bin неважно где, или в "Системные переменные" или в "Переменные среды пользователя". ( Обязательно, я на этом прогорел......) 2) В своей папке проекта делаем несколько папок OBJ (пустая) PRG ( туда все исходники *.prg ) RES (туда помещаем файл типа mainto.rc, а в нем единственную строчку MainIcon ICON "main.ico" - где main.ico ваша иконка, которая будет значком программы, и в эту же папку помещаем main.ico ) Кстати, оказывается туда можно несколько иконок затолкать, если нужно. 3) Запускаем в корне этих папок команду hbmake my_app.bc -e (если не запускается, то нет пути к c:\xHarbor\bin) где my_app.bc имя вашего проекта 4) появится такое окно: г==== HbMake v1.155 - xHarbour Make Utility Enviroment options =====¬ ¦Select the OS Win32Ё Select the C Compiler BCC Ё Graph Lib None Ё¦ ¦3rd Party Rdd None Ё [ ] Compress this app [ ] use xHarbour[.dll|.so]¦ ¦Obj Files Dir obj-вводим ¦ ¦Executable file name my_app [ ] Create dll ¦ ¦ ¦ 5) далее появится другое окно: ¦ xHarbour Options ¦[ ] Automatic memvar declaration /a [ ] Variables are assumed M-> /v ¦[ ] Debug info /b [ ] Suppress line number information /l ¦[ ] Generate pre-processed output /p [ ] compile module only /m ¦User Defines PRG-вводим User include Path PRG-вводим ¦[ ] Use External Libs [ ] xHarbour FWH ¦Resource file Name: RES-вводим ¦Numbers of source files per line on makefile 5 ¦[ ] Use Multi Thread Library Warning Level /w 0 6) Далее появится окно с исходниками, там нужно нажать клавишу F5, а если нужно убрать из проекта ненужный файл, то воспользуйтесь пробелом. 7) Далее вам нужно указать головной модуль программы, где стоит main() ¦ ¦Inform the main PRG of your application: PRG\MAINTO.PRG ¦ 8) далее появится другое окно: ¦ HbMake options ¦[ ] Create #DEPENDS from #include [ ] Scan recursive ¦Excluding these extensions : .ch НЕ разбирался, что к чему. 9) Далее появится запрос на создание, отвечаем Y. ¦ Build app ? (Y/N) ¦ 10) Далее на запрос компиляции отвечаем Y и ВСЕ !!! Если нет ошибок, то соберется my_app.exe В корне папки появиться файл my_app.bc В Far'e делаем в меню "Ассоциации файлов" вызов на расширение *.bc г================= Редактирование ассоциаций файлов =================¬ ¦ Одна или несколько масок файлов: ¦ ¦ *.bc v¦ ¦ Описание ассоциации: ¦ ¦ xHarbour make file ¦ ¦--------------------------------------------------------------------¦ ¦ Команда, выполняемая по Enter: ¦ ¦ c:\xHarbour\bin\hbmake !.! ¦ Теперь в Far'e нажимаем на my_app.bc клавишей ENTER и проект собираеться. Но у меня почему то не с первой попытки это вышло. Если хотите отредактировать заново проект, то он глючит. Лучше удалить и заново сделать. И у меня еще не установился мой главный модуль, мне пришлось ручками открыть my_app.bc и в объявлениях OBJFILES = ввести первым obj\mainto.obj и PRGFILES = ввести соответственно prg\mainto.prg И наверно в дальнейшем лучше ручками править этот файл. Если есть ошибки при компиляции, то можно использовать такой вызов hbmake my_app.bc -f и в файле my_app.log смотреть их. Благодарите не меня а наших Гуру на форуме !!!

TimTim: Посмотри еще статью, где олисан мой опыт перевода Clipper-проектов на xHarbour http://rapidshare.com/files/42684460/Clip2HB.rar

TakOj: Andrey пишет: Еле нашел то что просили: Порядок работы с HBMake под WinNT/2000/XP такой: Andrey! Это то, что не открывалось по ссылке http://www.clipper.fastbb.ru/?1-4-165-00000089-000-0-0-1160258031 в ветке "[x]Harbour -> Нужна помощь - вывести на консольиндикатор расскладки калавиатуры" ? Спасибо всем гуру и Andrey! Ко мне можно на "ты".

TakOj: TimTim пишет: Посмотри еще статью, где олисан мой опыт перевода Clipper-проектов на xHarbour Скачал. Спасибо! Будем изучать.

TakOj: Vlad04 пишет: ... Батник с Кресинского сайта нормально работает - им постоянно пользуюсь... Ничего против не имею. Vlad04 пишет: Вместо six используй dbfcdx из поставок с xHarbour( вызовы функций только надо поменять - sx_SetTagNo(1)-> DbSetOrder(1) и т.д.) ... А как узнать эти соответствия и где можно их посмотреть? Вот что линкер выдаёт: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_HB_FUN_SETRDD' Error: Unresolved external '_HB_FUN_SX_SETSCOPE' Error: Unresolved external '_HB_FUN_SX_CLRSCOPE' Error: Unresolved external '_HB_FUN__SXCONDSET' Error: Unresolved external '_HB_FUN_SX_SETTAG' Error: Unresolved external '_HB_FUN__VDBFSIX' Чем их заменить? Подскажите, плиз!

Vlad04: Вообще убрать ссылки на Six. SX_SETTAG -> IndexOrd() вместо SX_SETSCOPE OrdScope(0,KeyBeg) OrdScope(1,KeyEnd) Вот пример старта ********************* Procedure main local nWosract:=0,n1:=0,n2:=0,n3:=0 ,DdatBeg Local nPos:=0 ,sHouse:='',mHouse:={} REQUEST DBFCDX , DBFFPT REQUEST HB_CODEPAGE_RU866 hb_SetCodepage("RU866") set date brit set century on DdatBeg:=Ctod('01/06/2007') sElect 0 // справочник Use 'GORDATA2' Via "DBFCDX" alias SLAVE if !File('GORDATA2.CDX') INDEX ON STRT_CODE2 Tag STRT_CODE endif DbsetOrder(1) sElect 0 ************************** // список клиентов Use kLIENT Via "DBFCDX" alias Master Сообщи email вышлю весь пример



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