Введение

Что такое компонент?

Компоненты Gambas - это общие библиотеки, написанные на C или C++, которые добавляют новые функции в интерпретатор Gambas.

Они действуют подобно драйверам Linux, направляющихся к ядру Linux:

Компонент может содержать:

Компонент должен иметь имя. Это имя - слово gb , сопровождаемое разделямым точками списком слов, описывающих роль компонента и других компонент, от которых он зависит, если они есть.

Например, gb.qt.kde - это компонент, который трансформирует Gambas приложение в KDE приложение. Этот компонент зависит от gb.qt компонента, то есть, загрузка первого влечет за собой загрузку второго.

Интерфейс программировани Gambas (Programming Interface)

Интерфейс программирования Gambas - это множество утилит, функций и макросов, которые позволяют вам:

Использование этого интерфейса программирования крайне рекомендовано, так как это предохраняет компоненты от выполнения фатальных вещей.

Интерфейс программирования Gambas - это C структура, которая содержит один указатель функции на каждую функцию интерфейса.

Эта структура декларируется в main file вашего компонента и автоматически инициализируется интерпретатором при загрузке компонента.

Написание хороших компонентов

Написание хороших компонентов - это трудная часть! Положим, вы хотите написать SDL компонент, то есть, компонент, который позволит Gambas проекту использовать всю мощь библиотеки SDL: графику, звук, CD-ROM...

Вы можете вместить только wrapping the library функции, структуру и константы. Это легкий путь, даже если обертывание C структур и функций может не быть возможным в любом случае с Gambas.

Ваш компонент будет полезен, но не очень интересен для программистов Gambas, поскольку они будут обязаны программировать в C или C++ стиле.

Вместо этого, вы должны подвигнуть свои мозги к созданию другого интерфейса между Gambas и библиотекой, попытавшись обобщить и упростить оригинальный интерфейс библиотеки.

Это то, что я сделал с QT: много легче использовать QT компонент, чем программировать QT библиотеку непосредственно. И, если в один из дней кто-то напишет GTK+ компонент, он будет иметь возоможность использовать тот же самый интерфейс, поскольку я постарался обобщить QT интерфейс, избегая всего специфического QT материала... Хорошо, если честно, я положил все полезные специфические QT материалы в специальный расширенный компонент, gb.qt.ext

Организация исходников компонента

Исходные файлы компонента сохраняются в поддиректории lib директороии пакета исходников. Путь к этой директории отражает имя компонента.

Например, исходники gb.qt.kde компонента сохраняются в ./src/lib/qt/kde директории.

Типичная директория компонента состоит:

Например, вот результат ls ./src/lib/qt/kde непосредственно перед компиляцией :

CApplication.cpp  CDatePicker.cpp  CDialog.cpp  lib.gb.qt.kde.component  main.h    Makefile.am
CApplication.h CDatePicker.h CDialog.h main.cpp Makefile Makefile.in

Структура директории исходника компонента выглядит как-нибудь похожей на эту:

-+- lib
|
+---+- db
| |
| +----- mysql
| |
| +----- postgresql
|
+----- eval
|
+----- example
|
+----- net
|
+---+- qt
| |
| +----- editor
| |
| +----- ext
| |
| +----- kde
|
+----- sdl