Компоненты Gambas - это общие библиотеки, написанные на C или C++, которые добавляют новые функции в интерпретатор Gambas.
Они действуют подобно драйверам Linux, направляющихся к ядру Linux:
Компонент может содержать:
Компонент должен иметь имя. Это имя - слово gb
,
сопровождаемое разделямым точками списком слов, описывающих роль
компонента и других компонент, от которых он зависит, если они есть.
Например, gb.qt.kde
- это компонент, который
трансформирует Gambas приложение в KDE приложение. Этот компонент
зависит от gb.qt
компонента, то есть, загрузка первого
влечет за собой загрузку второго.
Интерфейс программирования 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
директории.
Типичная директория компонента состоит:
Makefile.am
файла, который описывает,
как компилировать компонент. (new topic)
Например, вот результат 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