Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Механизм плагинов (dll) |
Автор: sn8p 18.9.2007, 10:50 |
Здравстуйте, уважаемые. Пишу программу (MFC), которая должна использовать плагины dll (не обязательно MFC!). В плагинах будет часто повторяться одинаковый функционал, поэтому хотелось бы вынести набор функций отдельно (реализовать в главной программе). Собственно вопрос заключается в следущем: какими методами лучше предоставлять dll-ке функции, реализованые в клиенте? Например плагины могут сохранять какие-то данные, но хотелось бы это сделать централизовано, а не чтоб каждый по своему писал в свой отдельный файл. И таких функций будет не мало, поэтому просто их перечислять в параметрах функций dll тоже не хотелось бы. Зарание спасибо. |
Автор: SenkraD 18.9.2007, 11:57 |
sn8p, может http://www.cyberguru.ru/programming/visual-cpp/application-with-plugins.html поможет |
Автор: sn8p 18.9.2007, 13:05 |
SenkraD, спасибо. Статья полезная, но не раскрывает моего вопроса. Из предложеных мне вариантов пока 2: 1) написать dll с необходимым функционалом, которую будут подключать все плагины и главная программа 2) передавать адреса функций (реализованых в главной программе) как параметры в функции, экспортируемые dll первый способ вроде подходит. второй не подойдет при большом количестве функций. какие еще могут быть варианты? |
Автор: Earnest 19.9.2007, 15:18 | ||
Интерфейсы, конечно. И не обязательно именно IDL\ATL. Если не планируешь писать плагины на Бейсике, можно ограничиться "наколенной" реализацией. Т.е.: - определяешь несколько интерфейсов, в одном или нескольких заголовочных файлов. - реализуешь их в главной модуле - передаешь плагинам при подключении либо таблицу интерфейсов, либо конкретные интерфейсы, либо реализуешь в главном модуле какую-нибудь функцию типа GiveMeInterface ("ABCD"). Под интерфесом здесь понимается набор логически связанных функций, например:
Базовый интерфейс удобен, чтобы хранить интерфесы в таблице или возвращать единственной функцией. В реализации объеви просто статические объекты и возвращай их адреса, чтобы не зморачиваться с удалением и подсчетом ссылок - в этой задаче сие не нужно. Таким образом можно победить любое число функций. |
Автор: NiJazz 24.9.2007, 08:30 |
COM здесь весьма кстати. Один минус - нужно регистрировать компонент в реестре по всем формальным правилам. |
Автор: sn8p 2.10.2007, 09:51 |
Earnest, спасибо! ктруто! NiJazz, хотелось бы без COM, чтоб максимально упростить разработку плагинов. |
Автор: SenkraD 2.10.2007, 10:31 |
Earnest, лови + от sn8p, думаю он хотел бы тебе его дать |
Автор: sn8p 2.10.2007, 17:34 |
SenkraD, в точку! |