Russian Qt Forum
Октябрь 01, 2024, 10:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Зависимость плагинов один от другого в приложении  (Прочитано 6285 раз)
SeverusSnape
Гость
« : Август 30, 2011, 15:14 »

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

Может кто поделиться опытом/советом как сам реализовывал (бы) данный вопрос? Весьма благодарен!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Август 30, 2011, 15:17 »

Посмотри QtCreator - там много плагинов.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Август 30, 2011, 16:02 »

Я крутил примерно так

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

Ну вот я так примерно и думал, просто хотелось услышать мнение более опытных товарищей.
Спасибо!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Август 30, 2011, 16:31 »

Дальше там заморочки с тем что хост может выгрузить (перезагрузить) плагин и он должен оповестить об этом плагины которые его пользуют - ну или наоборот
Записан
SASA
Гость
« Ответ #5 : Август 30, 2011, 16:44 »

А зачем зависимости плагинов?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Август 30, 2011, 18:52 »

Погляди https://gitorious.org/andromeda/andromeda/trees/master/src/libs/extensionsystem Вдруг пригодится.
Записан
iroln
Гость
« Ответ #7 : Август 30, 2011, 20:53 »

А не смотрели, как сделано в qutIM 0.3?
Вроде бы у них плагины могут зависеть друг от друга, и программа как раз на Qt пишется.
http://wiki.qutim.org/ru/how_to_create_plugin_sdk03
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #8 : Сентябрь 02, 2011, 11:40 »

У плагина должна быть функция, которая возвращает описатель плагина. Собственно, в описателе и будут перечислена вся информация, зависимости и т.д.
Записан

Гугль в помощь
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #9 : Сентябрь 02, 2011, 13:23 »

navrocky
Да, первая мысля именно такая. Однако при попытке загрузить плагин он автоматом загрузит те либы, к к-м он слинкован (в тч плагины) Инстанс естессно у зависимых плагинов никто не вызовет, инициализация не пройдет. Как-то так.

Кроме того, описание зависимотей внешними файлами позволяет не грузить либу, если плагин отключен; а кроме того, можно подгружать описания по сети с сервера плагинов.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 22.