Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Механизм плагинов (dll), использование из dll функций клиента 
V
    Опции темы
sn8p
Дата 18.9.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 29.3.2006

Репутация: нет
Всего: 1



Здравстуйте, уважаемые.
Пишу программу (MFC), которая должна использовать плагины dll (не обязательно MFC!). В плагинах будет часто повторяться одинаковый функционал, поэтому хотелось бы вынести набор функций отдельно (реализовать в главной программе). Собственно вопрос заключается в следущем: какими методами лучше предоставлять dll-ке функции, реализованые в клиенте? Например плагины могут сохранять какие-то данные, но хотелось бы это сделать централизовано, а не чтоб каждый по своему писал в свой отдельный файл. И таких функций будет не мало, поэтому просто их перечислять в параметрах функций dll тоже не хотелось бы.
Зарание спасибо.
PM MAIL   Вверх
SenkraD
Дата 18.9.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 4
Всего: 23



sn8p, может это поможет


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
sn8p
Дата 18.9.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 29.3.2006

Репутация: нет
Всего: 1



Цитата(SenkraD @  18.9.2007,  11:57 Найти цитируемый пост)
sn8p, может это поможет

SenkraD, спасибо. Статья полезная, но не раскрывает моего вопроса.

Из предложеных мне вариантов пока 2:
1) написать dll с необходимым функционалом, которую будут подключать все плагины и главная программа
2) передавать адреса функций (реализованых в главной программе) как параметры в функции, экспортируемые dll

первый способ вроде подходит. второй не подойдет при большом количестве функций.
какие еще могут быть варианты?
PM MAIL   Вверх
Earnest
Дата 19.9.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Интерфейсы, конечно. И не обязательно именно IDL\ATL. Если не планируешь писать плагины на Бейсике, можно ограничиться "наколенной" реализацией.
Т.е.:
- определяешь несколько интерфейсов, в одном или нескольких заголовочных файлов.
- реализуешь их в главной модуле
- передаешь плагинам при подключении либо таблицу интерфейсов, либо конкретные интерфейсы, либо реализуешь в главном модуле какую-нибудь функцию типа GiveMeInterface ("ABCD").
Под интерфесом здесь понимается набор логически связанных функций, например:
Код

struct IDataFile: [virtual] public IBaseIFace
{
   virtual bool OpenFile (LPCTSTR) = 0;
   virtual bool SaveFile (LPCTSTR) = 0;
   ...
};

Базовый интерфейс удобен, чтобы хранить интерфесы в таблице или возвращать единственной функцией. В реализации объеви просто статические объекты и возвращай их адреса, чтобы не зморачиваться с удалением и подсчетом ссылок - в этой задаче сие не нужно.
Таким образом можно победить любое число функций. 


--------------------
...
PM   Вверх
NiJazz
Дата 24.9.2007, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 2
Всего: 23



COM здесь весьма кстати. Один минус - нужно регистрировать компонент в реестре по всем формальным правилам.
PM MAIL   Вверх
sn8p
Дата 2.10.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 29.3.2006

Репутация: нет
Всего: 1



Earnest, спасибо! ктруто!
NiJazz,  хотелось бы без COM, чтоб максимально упростить разработку плагинов.
PM MAIL   Вверх
SenkraD
Дата 2.10.2007, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 4
Всего: 23



Earnest,  лови + от sn8p, думаю он хотел бы тебе его дать


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
sn8p
Дата 2.10.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 29.3.2006

Репутация: нет
Всего: 1



SenkraD, в точку!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1180 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.