Уважаемые форумяне есть ли методика создания кроссплатформенных приложений на Lazarus с применением плагинов?
Если есть подскажите путь, что и где почитать по теме.
Приложение с плагинами... как?
Модератор: Модераторы
Да в принципе методика ничем не отличаеться от некроссплатформенной. Аналог Windows dll есть под любой поддерживаемой Лазарус системой. В SDK для плагинописателей надо лишь указать необходимый перечень функций/интерфейсов которые должен экспортировать плагин и указать где плагин должен находиться/регистрироваться, всё зависит от Вашей фантазии. При запуске Ваша программа просматривает список зарегистрированных плагинов (или специальный каталог, где должны находиться плагины), загружает их, и использует предопределённые функции из них..
Ещё можно сделать систему плагинов на основе какого-нибудь скриптового языка (см. Pascal Script, Python, LUA).
Ещё можно сделать систему плагинов на основе какого-нибудь скриптового языка (см. Pascal Script, Python, LUA).
ОК. А как на счет визуальных плагинов, которые загружаются во фрейм, и содержат различные контролы типа DBGrid и тому подобное. У меня по этой теме опыта немного. На ум только приходит способ через ActiveX. А можно ли подобное сделать через dll/so?
кроссплатформенно неа.. если и можно то крайне не желательно, стабильность такого будет сложно гарантировать.
Лучше сделать для плагинов какой-нибудь невизуальный АПИ для доступа и создания в основном приложении этих самых гридов и проч. контролов, если они так нужны. Муторно, но гораздо надёжней, а если кроссплатформенно, то возможно это и есть единственный выход..
Лучше сделать для плагинов какой-нибудь невизуальный АПИ для доступа и создания в основном приложении этих самых гридов и проч. контролов, если они так нужны. Муторно, но гораздо надёжней, а если кроссплатформенно, то возможно это и есть единственный выход..
А вот с этого места, если можно, поподробнее. Как просмотреть каталог понятно, а вот как кроссплатформенно загрузить плагины и использовать функции, совершенно непонятно. Хотябы подскажите в какую сторону копать (документацию на какие библиотеки/модули/функции курить)?FedeX писал(а):При запуске Ваша программа просматривает список зарегистрированных плагинов (или специальный каталог, где должны находиться плагины), загружает их, и использует предопределённые функции из них..
I.
есть хороший модуль: dynlibs (его использует opengl для загрузки основных и расширенных функций)
http://www.freepascal.org/docs-html/rtl ... index.html
dynlibs это кроссплатформенный модуль для загрузки системных библиотек. Используя его можно написать кроссплатформенный код для загрузки плагинов на базе .dll (для Windows), .so (для Linux) и .dylib (для MacOSX)
3 элементарных функции (схожих с WinAPI)
загрузить библиотеку, получить адрес функции по имени, выгрузить библиотеку.
Конечно, все люди грамотные, и понимают, что на linux-е .dll с помощью этих функций не подгрузить (так же как и .so на Windows). Ибо это простые dynlibs это лишь удобная обёртка вокруг системных функций.
P.S. упомянутый OpenGL это отличный пример кроссплатформенной библиотеки, которая использует кроссплатформенную систему плагинов на базе не кроссплатформенный системных библиотек
Захотела NVidia выпустить расширение для очередной карточки: старается выпускает версии для Win, Linux и MacOSX.
II.
для совершенной кроссплатформенности можно подумать над использованием PascalScript.
есть хороший модуль: dynlibs (его использует opengl для загрузки основных и расширенных функций)
http://www.freepascal.org/docs-html/rtl ... index.html
dynlibs это кроссплатформенный модуль для загрузки системных библиотек. Используя его можно написать кроссплатформенный код для загрузки плагинов на базе .dll (для Windows), .so (для Linux) и .dylib (для MacOSX)
3 элементарных функции (схожих с WinAPI)
Код: Выделить всё
Function LoadLibrary(Name : AnsiString) : TLibHandle;
Function GetProcedureAddress(Lib : TlibHandle; ProcName : AnsiString) : Pointer;
Function UnloadLibrary(Lib : TLibHandle) : Boolean;
загрузить библиотеку, получить адрес функции по имени, выгрузить библиотеку.
Конечно, все люди грамотные, и понимают, что на linux-е .dll с помощью этих функций не подгрузить (так же как и .so на Windows). Ибо это простые dynlibs это лишь удобная обёртка вокруг системных функций.
P.S. упомянутый OpenGL это отличный пример кроссплатформенной библиотеки, которая использует кроссплатформенную систему плагинов на базе не кроссплатформенный системных библиотек
Захотела NVidia выпустить расширение для очередной карточки: старается выпускает версии для Win, Linux и MacOSX.
II.
для совершенной кроссплатформенности можно подумать над использованием PascalScript.
