Russian Qt Forum

Qt => Общие вопросы => Тема начата: SeverusSnape от Август 30, 2011, 15:14



Название: Зависимость плагинов один от другого в приложении
Отправлено: SeverusSnape от Август 30, 2011, 15:14
Добрый день! Пишу небольшую программку - все работает отлично, но однажды захотелось встроить систему плагинов.
Опять все получилось и даже работает, но захотелось еще чтобы плагины могли взаимодействовать между собой. Здесь тоже, как мне кажется, проблем не должно возникнуть. Но! Возникла необходимость проверять зависимости плагинов одного от другого. То есть при загрузке программа пробегается по папке, создает список плагинов. Один плагин может зависеть от другого и без этого другого плагина работа первого невозможна.

Может кто поделиться опытом/советом как сам реализовывал (бы) данный вопрос? Весьма благодарен!


Название: Re: Зависимость плагинов один от другого в приложении
Отправлено: Пантер от Август 30, 2011, 15:17
Посмотри QtCreator - там много плагинов.


Название: Re: Зависимость плагинов один от другого в приложении
Отправлено: Igors от Август 30, 2011, 16:02
Я крутил примерно так

Код
C++ (Qt)
struct CPluginList {
CPluginList * mNext;         // следующий плагин в списке
UInt32 mPluginID;            // уникальное ID плагина
TPluginProc mProc;          // точка входа
UInt32 mDataSize;          // размер данных  
char mData[1];              // данные
};
 
CPluginList ** GetPluginList( void );  // вызов хоста из плагинв
 
Получив GetPluginList, плагин может повесить себя в список чтобы др. могли его звать - или позвать тех кто предоставляет стервис


Название: Re: Зависимость плагинов один от другого в приложении
Отправлено: SeverusSnape от Август 30, 2011, 16:14
Ну вот я так примерно и думал, просто хотелось услышать мнение более опытных товарищей.
Спасибо!


Название: Re: Зависимость плагинов один от другого в приложении
Отправлено: Igors от Август 30, 2011, 16:31
Дальше там заморочки с тем что хост может выгрузить (перезагрузить) плагин и он должен оповестить об этом плагины которые его пользуют - ну или наоборот


Название: Re: Зависимость плагинов один от другого в приложении
Отправлено: SASA от Август 30, 2011, 16:44
А зачем зависимости плагинов?


Название: Re: Зависимость плагинов один от другого в приложении
Отправлено: Авварон от Август 30, 2011, 18:52
Погляди https://gitorious.org/andromeda/andromeda/trees/master/src/libs/extensionsystem Вдруг пригодится.


Название: Re: Зависимость плагинов один от другого в приложении
Отправлено: iroln от Август 30, 2011, 20:53
А не смотрели, как сделано в qutIM 0.3?
Вроде бы у них плагины могут зависеть друг от друга, и программа как раз на Qt пишется.
http://wiki.qutim.org/ru/how_to_create_plugin_sdk03


Название: Re: Зависимость плагинов один от другого в приложении
Отправлено: navrocky от Сентябрь 02, 2011, 11:40
У плагина должна быть функция, которая возвращает описатель плагина. Собственно, в описателе и будут перечислена вся информация, зависимости и т.д.


Название: Re: Зависимость плагинов один от другого в приложении
Отправлено: Авварон от Сентябрь 02, 2011, 13:23
navrocky
Да, первая мысля именно такая. Однако при попытке загрузить плагин он автоматом загрузит те либы, к к-м он слинкован (в тч плагины) Инстанс естессно у зависимых плагинов никто не вызовет, инициализация не пройдет. Как-то так.

Кроме того, описание зависимотей внешними файлами позволяет не грузить либу, если плагин отключен; а кроме того, можно подгружать описания по сети с сервера плагинов.