| Switch to English | Александр Кресин |
| Главная | Clipper | HwGUI | Harbour | Утилиты |
| Ссылки | Five stones | KS Organizer | Мое фото |
Harbour для начинающих
Как установить Harbour и откомпилировать на нем свою программу.
Александр Кресин
Октябрь 2003
Официальные дистрибутивы Харбора находятся на Sourceforge. Там выложены как исходники, так и готовые к работе бинарники ( exe и lib ). Если вы скачаете исходники, то вам надо будет откомпилировать из них сам Харбор. Это не трудно, но, возможно, для начинающего ни к чему. Это может быть полезным, если вы захотите получить самую свежую версию Харбора с CVS ( официальные версии выходят далеко не каждый день ).
Есть один важный вопрос, который вам надо решить для себя сразу, до скачивания
дистрибутива Харбора - это вопрос о С компиляторе.
Дело в том, что сам компилятор Харбор не создает объектные файлы ( obj, o ), результатом
его работы является *.c файл, который надо затем скомпилировать С компилятором, чтобы получить exe'шник.
Но пусть это вас не пугает ! Вам не обязательно знать для этого С - достаточно, чтобы С компилятор был
у вас установлен. А использование его для компиляции и линковки ваших файлов ничуть не сложнее,
чем использование Rtlink или Blinker'а.
Если вы работаете в Линуксе, то C компилятор у вас уже есть - это стандартный GNU C.
если же ваша платформа - Win32, то надо выбирать. Большинство тех, кто работает с Харбором,
использует бесплатный Borland C 5.5.1, его можно скачать с ftp://ftpd.borland.com/download/bcppbuilder/freecommandLinetools.exe.
Если у вас уже стоит C++ Builder или Visual C, можете использовать их.
Еще один хороший C компилятор - Mingw http://www.mingw.org.
Примечание для тех, кто будет устанавливать Borland C 5.5.1 и не прочитает их readme.txt:
чтобы он работал, необходимо вручную создать в bcc55\bin 2 файла:
BCC32.CFG:
-I"c:\Borland\Bcc55\include"и ILINK32.CFG:
-L"c:\Borland\Bcc55\lib"
-L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK"
Кстати, чтобы запустить на исполнение небольшую программу, вы можете обойтись и без С.
1.1 Устанавливаем бинарники Харбора
Установка бинарников сводится, собственно, к распаковке дистрибутива.
1.2 Устанавливаем Харбор из исходников
Чтобы построить Харбор - компилятор и библиотеки, нам нужен опять-таки C компилятор и две утилиты - Flex и Bison ( лексический анализатор ). Все это включено в любую Unix систему, а для Windows их надо скачать - например, с http://gnuwin32.sourceforge.net/packages.html.
Итак, у вас есть Borland C и Flex с Bison'ом - разместите эти две утилиты в каталоге, который прописан у вас в пути ( set path=... ).Удостоверьтесь, что путь к bcc32.exe ( bcc55/bin ) также указан в set path, и что он стоит там раньше, чем какой-нибудь другой компилятор.
Теперь запускаете на исполнение harbour/make_b32.bat - и все !
Подробнее о CVS и как его использовать, вы можете прочитать в документации - это небольшой ( 169К ) zip архив.
А я расскажу об этом коротко - в применении к Харбору.
Итак, CVS - это программа с серверной и клиентской частями, которая позволяет разработчикам, у которых установлены клиентские части,
совместно работать с исходниками проекта, которые находятся на сервере ( в Интернет или в локальной сети ),
разрешает конфликты, возникающие при одновременном изменении одного файла разными людьми.
При этом CVS обеспечивает и контроль версий - т.е., все версии каждого файла хранятся, могут быть извлечены, восстановлены;
можно проверить, кем и какие изменения были сделаны.
Очень удобная штука, рекомендую и для внутреннего использования в подразделении.
Разработчики Харбора используют для доступа к CVS бесплатный сервис, предоставляемый SourceForge.net.
Установив CVS клиент, вы можете получить доступ к исходникам Харбора - самому последнему варианту, как у разработчиков.
В первый раз вам придется скачать полный набор ( ~16M ), при последующих обращениях передаваться будут только изменения.
Вам надо выбрать одну из нескольких клиентских программ, две из них будут рассмотрены ниже.
1.3.1 CVS-клиент: GUI (Tortoise)
Это довольно удобная программа, которыю можно взять на http://www.tortoisecvs.org/.
После установки у вас добавятся новые строчки в контекстном меню, появляющемся при щелчке по файлу в
"My computer" или Windows Explorer.
Итак, щелкаете правой кнопкой мыши по папке, куда хотите скачать исходники и выбираете в меню "CVS checkout".
В диалоговом окошке указываете следующие параметры:
Жмете "ОК" - и в путь !
Скачиваете с Харборовского сайта http://www.harbour-project.org/download.htm CVS_DOS, распаковываете, например, в C:\CVS и создаете там же bat файл следующего содержания:
@echo offВ ответ на приглашение ввести пароль просто жмите ENTER.SET CVSROOT=:pserver:anonymous@harbour-project.cvs.sourceforge.net:/cvsroot/harbour-project SET HOME=C:\CVS cvs login cvs checkout -P harbour
2. Компиляция и линковка программы
Последовательность действий здесь простая:
Ниже приведен bat'ник, которым я обычно пользуюсь, чтобы скомпилировать 1 prg:
@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 %1.prg -n -i%HB_INC_INSTALL% bcc32 -O2 -d -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% %1.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Если вам надо построить программу из нескольких файлов, то можно использовать что-либо вроде этого:
@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 file1.prg -n -i%HB_INC_INSTALL% %HB_BIN_INSTALL%\harbour file2.prg -n -i%HB_INC_INSTALL% ... bcc32 -O2 -d -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% file1.c file2.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
Да, вы можете скомпилировать свою программу и запустить ее на исполнение и без С компилятора ! Harbour.exe может создать из вашего prg специальный p-code файл ( наподобие Fox'овского fxp ), небольшой по размеру, который можно исполнить с помощью утилиты Hbrun.exe - она входит в комплект дистрибутива.
Итак, компилируйте программу с ключом /gh ( остальный ключи - /n, /w, ... - как обычно, по необходимости ) :harbour.exe my.prg /ghЕсли компиляция завершится без ошибок, вы получаете файл my.hrb и исполняете его:
hbrun.exe my.hrb [ параметры ]где параметры - это те параметры, с которыми вы запускаете свою программу.
3. Отличия от Клиппера - краткое описание
Харбор создавался как полностью совместимый с Клиппером компилятор. Это значит,
что любая ваша программа, написанная на Клиппере, должна без проблем компилироваться Харбором
и работать так же, как если бы она была откомпилирована Клиппером. Во многих случаях так оно и есть,
но, конечно, могут возникать и проблемы - не все получается так, как задумано, Харбор не свободен от ошибок и недоделок.
Еще один возможный источник проблем при переходе с Клиппера на Харбор - это дополнительные
библиотеки, вставки на С и ассемблере, если вы их используете - 16-разрядные объектники не прилинкуются к 32-разрядному приложению.
Если у вас есть исходники этих модулей, то можно попробовать перекомпилировать их, хотя и тут успех не гарантирован - не все функции
16-разрядного С компилятора доступны в 32-разрядном.
Но, конечно же, Харбор не просто повторяет функциональность Клиппера, а существенно расширяет ее - иначе какой
был бы в этом смысл ?! Помимо расширений, связанных с переходом от 16 к 32 разрядному коду ( снятие ограничений по памяти, по размерности массивов
и длине строк ), Харбор предлагает и языковые расширения, и дополнительные функциональные возможности. Они и будут рассмотрены ниже.
Сразу хочу предупредить, что этот перечень будет неполным - о чем-то я могу забыть, что-то не написать просто из-за нехватки времени и терпения.
Начну с немногого, потом постепенно, по мере возможности, буду пополнять этот список и расширять описания.
Рекомендую вам также воспользоваться документацией с http://www.harbour-project.org/download_docu.htm.
Она, правда, тоже не полная, и, к тому же, не на русском - но, даже если у вас с английским проблемы, что-нибудь полезное вы оттуда все равно почерпнете - хотя бы названия
новых функций, образцы синтаксиса, и т.д.
Эта подсистема предназначена для вывода аварийных сообщений и результата
функций CMonth(), CDow() - но, в отличие от аналогичных средств в Клиппере, она позволяет
менять язык программы во время исполнения.
Чтобы подключить ее к вашему приложению, надо указать в link - скрипте библиотеку lang.lib
и включить в главный prg файл предложения REQUEST с именами тех языков, которые
вы предполагаете использовать, например:
REQUEST HB_LANG_RU866 REQUEST HB_LANG_RUWIN
| Устанавливает язык программы, возвращает ID предыдущего языка. | |
| Возвращает название языка программы. | |
| Возвращает текст ошибки по номеру. | |
| Возвращает текст аварийного сообщения по номеру. |
Эта подсистема обеспечивает поддержку национальных кодовых страниц для ваших данных. Чтобы подключить ее к вашему приложению, надо указать в link - скрипте библиотеку codepage.lib и включить в главный prg файл предложения REQUEST с именами тех кодовых страниц, которые вы предполагаете использовать, например:
REQUEST HB_CODEPAGE_RU866 REQUEST HB_CODEPAGE_RUKOI8 REQUEST HB_CODEPAGE_RU1251
Далее, следует определить главную кодовую страницу приложения. Именно эта кодовая страница будет
использоваться для функций IsUpper(), IsLower(), IsAlpha(), Upper(), Lower(), Transform() и при сравнении строк. В консольном
приложении, по-видимому, следует использовать "RU866", а в Windows GUI приложении - "RU1251".
Для установки главной кодовой страницы используется функция
Hb_SetCodepage( sCodepage ) например: hb_SetCodepage( "RU866" )
Подобная возможность есть и в Клиппере ( путем подключения специальных obj ), но в Харборе, кроме того, можно определить кодовую страницу для любого открываемого файла данных - при этом все строки будут автоматически транслироваться в главную кодовую страницу приложения при чтении и обратно - при записи, транслироваться будут и строки в dbSeek(), dbLocate(), dbSetFilter(). Достаточно указать кодовую страницу при открытии файла - и вся последующая работа с ним будет выглядеть так, как будто данные находятся в основной кодовой странице:
USE file_name ... CODEPAGE "RU1251" или dbUseArea( .T.,,file_name,,.T.,.F.,"RU1251" )
По умолчанию файл открывается с главной кодовой страницей приложения.
Эту возможность ( определение кодовой страницы файла ) следует использовать только с
родными RDD - DBFNTX и DBFCDX.
ADS RDD предоставляет для этих целей другие средства ( настройка ini файла или SET CHARTYPE TO OEM/ANSI ).
Codepage API включает также функцию для трансляции строк из одной кодовой страницы в другую:
Hb_Translate( sData, sCodepageIN, sCodepageOUT ) например: Hb_Translate( "Привет", "RU1251", "RU866" )
Я уже отмечал здесь, что Харбор может вместо С файла создать
из вашего prg особый тип файла с расширением hrb, который содержит p-code вашей программы и
может быть исполнен утилитой Hbrun.exe.
Но этот hrb может быть вызван на исполнение и непосредственно из вашей программы - для
этого предусмотрены специальные функции:
| Исполняет hrb файл с именем hrbname, передает ему список параметров и возвращает результат. | |
| Загружает в память инструкции из hrb файла с именем hrbname, возвращает указатель на эти инструкции. | |
| Исполняет инструкции из hrb файла, на которые указывает handle, передает им список параметров и возвращает результат. | |
| Выгружает инструкции, на которые указывает handle, из памяти. | |
| Получает указатель на функцию с именем functionName, определенную hrb файле; предварительно надо загрузить этот hrb в память с помощью __HRBLOAD( hrbName ). | |
| Выполняет функцию, на которую указывает funcHandle, передает ей список параметров и возвращает результат. |
Необходимо проследить, чтобы приложение было собрано со всеми функциями, которые могут вызываться из .hrb, иначе во время исполнения программа вылетит. Лучше всего это сделать, поставив в вашей программе
REQUEST <имя_функции>Можно включить #include "hbextern.ch" - в нем собраны REQUEST на все Харборовские функции. Размер программы в результате, конечно, увеличится, зато у вас будет гарантия, что все функции включены.
В Харборе есть возможность вставлять фрагменты С кода в prg файл. Это может быть удобно, если вам лень из-за пары нужных С функций создавать .с файл и вставлять его в проект. Делается это при помощи директив #pragma BEGINDUMP ... #pragma ENDDUMP.
#pragma BEGINDUMP
#include < extend.h >
#include < math.h >
HB_FUNC( SIN )
{
double x = hb_parnd(1);
hb_retnd( sin( x ) );
}
#pragma ENDDUMP
4. Дополнительные библиотеки ( Contributions )
Для Харбора написано уже больше десятка дополнительных библиотек, расширяющих его
функциональность. Большинство из них находятся в том же CVS репозитарии, где и исходники
самого Харбора, в каталоге contrib/.
ADS - Advantage Database System производства компании Extended Systems, клиент-серверная RDBMS, работающая с dbf и adt ( специальный формат, разработанный Extended Systems ). Многие программисты, работающие на Клиппере, хорошо знают этот продукт, т.к. существует RDD для Клиппера, обеспечивающий доступ к ADS серверу и работу в режиме клинт - сервер. Если вы не знакомы с ADS, загляните на http://dimma.da.ru, там на Клиппер - страничке много об этом говорят.
RDD для доступа к ADS серверу написан и под Харбор. В отличие от Клипперовского, он позволяет работать и с adt таблицами, поддерживает дополнительные типы данных и позволяет работать не только с удаленным ADS сервером, но и с локальным. Дело в том, что удаленный ADS сервер - это не дешевая штука, он стоит, как и другие клиент - серверные DBMS, несколько тысяч $ ( хотя есть и лекарства :) ). А вот клиентская часть и локальный сервер - тот, что позволяет работать на локальном или удаленном компьютере не в клиент-сереверном режиме, бесплатны, их можно скачать с сайта Extended Systems, предварительно зарегистрировавшись, или с http://www.harbour-project.org/download.htm без всякой регистрации. Таким образом, имея 2 dll'ки и слинковав свою программу с RDD ADS, вы можете легально и бесплатно работать с этим продуктом.
Работает локальный ADS несколько медленнее, чем родные RDD ( DBFNTX и DBFCDX ), но имеет ряд преимуществ перед ними.
Во - первых, он заведомо надежен, т.к. проверен в течении многих лет десятками тысяч пользователей.
Во - вторых, он предоставляет ряд дополнительных возможностей, в т.ч. - шифрование данных, оптимизированные фильтры, возможность использования SQL,
дополнительные типы данных, доступ к adt - таблицам ...
Документации по ADS RDD не много и она на английском, вы найдете ее в contrib/rdd_ads/doc. Рекомендую также посмотреть файл исходников adsfunc.c - там вы найдете все дополнительные функции.
Итак, что нужно, чтобы подключить ADS RDD к вашей программе ?implib ace32.lib ace32.dllи включить ее в свой линк - скрипт.
REQUEST _ADS rddRegister( "ADS", 1 ) rddsetdefault( "ADS" )По умолчанию ADS RDD настроен на использование удаленного сервера и CDX индексов, поэтому, чтобы работать с локальным сервером, напишите:
SET SERVER LOCALНе забудьте подключить #include "ads.ch".