![]() |
|
![]() ![]() ![]() |
|
sn8p |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 29.3.2006 Репутация: нет Всего: 1 |
Здравстуйте, уважаемые.
Пишу программу (MFC), которая должна использовать плагины dll (не обязательно MFC!). В плагинах будет часто повторяться одинаковый функционал, поэтому хотелось бы вынести набор функций отдельно (реализовать в главной программе). Собственно вопрос заключается в следущем: какими методами лучше предоставлять dll-ке функции, реализованые в клиенте? Например плагины могут сохранять какие-то данные, но хотелось бы это сделать централизовано, а не чтоб каждый по своему писал в свой отдельный файл. И таких функций будет не мало, поэтому просто их перечислять в параметрах функций dll тоже не хотелось бы. Зарание спасибо. |
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 4 Всего: 23 |
sn8p, может это поможет
|
|||
|
||||
sn8p |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 29.3.2006 Репутация: нет Всего: 1 |
SenkraD, спасибо. Статья полезная, но не раскрывает моего вопроса. Из предложеных мне вариантов пока 2: 1) написать dll с необходимым функционалом, которую будут подключать все плагины и главная программа 2) передавать адреса функций (реализованых в главной программе) как параметры в функции, экспортируемые dll первый способ вроде подходит. второй не подойдет при большом количестве функций. какие еще могут быть варианты? |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Интерфейсы, конечно. И не обязательно именно IDL\ATL. Если не планируешь писать плагины на Бейсике, можно ограничиться "наколенной" реализацией.
Т.е.: - определяешь несколько интерфейсов, в одном или нескольких заголовочных файлов. - реализуешь их в главной модуле - передаешь плагинам при подключении либо таблицу интерфейсов, либо конкретные интерфейсы, либо реализуешь в главном модуле какую-нибудь функцию типа GiveMeInterface ("ABCD"). Под интерфесом здесь понимается набор логически связанных функций, например:
Базовый интерфейс удобен, чтобы хранить интерфесы в таблице или возвращать единственной функцией. В реализации объеви просто статические объекты и возвращай их адреса, чтобы не зморачиваться с удалением и подсчетом ссылок - в этой задаче сие не нужно. Таким образом можно победить любое число функций. -------------------- ... |
|||
|
||||
NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 2 Всего: 23 |
COM здесь весьма кстати. Один минус - нужно регистрировать компонент в реестре по всем формальным правилам.
|
|||
|
||||
sn8p |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 29.3.2006 Репутация: нет Всего: 1 |
Earnest, спасибо! ктруто!
NiJazz, хотелось бы без COM, чтоб максимально упростить разработку плагинов. |
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 4 Всего: 23 |
Earnest, лови + от sn8p, думаю он хотел бы тебе его дать
|
|||
|
||||
sn8p |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 29.3.2006 Репутация: нет Всего: 1 |
SenkraD, в точку!
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |