Страница 1 из 1

Потдержка программой плагинов

Добавлено: 26 сен 2007, 19:35
Hastur
Привет. Решил сделать в своей проге потдержку плагинов. Первой мыслью было просто отправлять в длл все сообщения приложения а дллка пусть там уже сама разбирается на это или другое сообщение предусмотрин её функционал. Ещё думалось создать какойнить универсальный com-интерфейс(правда реализовывать не пробовал).
Может у кого есть опыт организации приложения и неограниченного числа плагинов? Посоветуйте плз.

Re: Потдержка программой плагинов

Добавлено: 26 сен 2007, 20:08
Hastur
в делфи ворде есть док с такой фразой

Возможно 2 подхода к построению такой программы

плагины получают информацию от ядра программы, но сами к ядру не обращаются. Назовём такой подход пассивным. в активном подходе плагины инициируют некоторые события и заставляют ядро их слушаться.

Второй подход требует более сложного алгоритмического построения, поэтому я рассмотрю только первый.

Я в принципе и сделал первый вариант но уж слишком неповоротливый только для весьма узкого круга задач и с появлением новой потребнонсти приходиться переписывать ядро, но ведь суть то как раз в том чтобы главный проект был неизменен.

Если можно то по второму подходу подскжите чтонить

Re: Потдержка программой плагинов

Добавлено: 27 сен 2007, 11:20
BBB
А если посмотреть на (изучить) устройство/поддержку плагинов файловой оболочкой FAR? Технология "открыта", документирована.
(чуть подумав) Хотя там, пожалуй, "первый подход" (если говорить в воих терминах :) )

Re: Потдержка программой плагинов

Добавлено: 24 окт 2007, 10:30
Пабло
На мой взгляд удобней всего сделать так.
Каждый плагин должен реализовывать интерфейс, допустим IPlugin с двумя функциями
IPlugin.Load(Owner:IUnknown);
IPlugin.Unload;
в ini файле прописать CLSID(ClassID - идентификатор класса) загружаемых плагинов.

При старте системы создавать указанные в ini COM объекты, запрашивать у них интерфейс IPlugin и вызывать метод Load(). В метод Load можно передать:
1) Специальный интерфейс с помощью которого плагин может организовывать работу с системой. (это первый вариант с ограниченным доступом)
2) Интерфейс на саму систему(если таковой имеется конечно), с помощью которого можно управлять системой. (это второй вариант с полным доступом к системе)
При закрытии системы вызывать метод UnLoad в котором необходимо будет отпустить все интерфейсы на систему.

Re: Потдержка программой плагинов

Добавлено: 24 окт 2007, 17:00
Hastur
Пабло писал(а): 2) Интерфейс на саму систему(если таковой имеется конечно), с помощью которого можно управлять системой. (это второй вариант с полным доступом к системе)
При закрытии системы вызывать метод UnLoad в котором необходимо будет отпустить все интерфейсы на систему.
А что ты понимаешь под "...отпустить все интерфейсы на систему"?

Re: Потдержка программой плагинов

Добавлено: 24 окт 2007, 17:34
Пабло
Я понимаю под этим, присвоить nil всем переменным класса которые имеют тип данных интерфейс.
Т.е. допустим ты в своем плагине хранил переданный тебе в методе Load интерфейс, в переменной класса FOwner:IUnknown, то в методе Unload ты должен этой переменной присвоить nil.