Project

General

Profile

OLD Digispot II Plugins (COM)

В системе предусмотрен простой, базирующийся на COM способ включения плагинов в систему.
Плагин включается в систему посредством обычной DLL, экспортирующей по имени 3 функции:

HRESULT stdcall DSPL_Initialize(void) Вызывается 1 раз, перед всеми остальными обращениями
Предназначен для инициализации личных данных DLL
Вызывается после Process Attach, соответственно, не имеет проблем с вызовами функций синхронизации, порождения потоков и пр.
HRESULT stdcall DSPL_Deinitialize(void) Обратная DSPL_Initialize
Вызывается 1 раз в самом конце работы приложения.
HRESULT stdcall DSPL_GetPluginLib(void**dst) Основной метод
возвращает указатель на интерфейс IDSPluginLib
Этот интерфейс представляет собой бибилиотеку плагинов.
Все остальное

Всё остальное общение плагина и хоста идет через вызовы COM интерфейсов, со стороны хоста главным интерфейсом является IDSHost.

Основные идеи:

  • Приложение загружает DLL и получает интерфейс _’бибилиотеки плагинов_
  • У бибилиотеки есть строчный идентификатор, например _PLUGIN_LIBRARY_
  • У каждого плагина есть строчный идентификатор, например, _PLUGIN_A_
  • У библиотеки можно получить идентификаторы и описание всех типов плагинов, которые она умеет создавать
  • Хост идентифицирует плагины не по названиям DLL, а по идентификаторам
  • Полное имя плагина это ИД_БИБИЛИОТЕКИ.ИД_ПЛАГИНА, например _PLUGIN_LIBRARY.PLUGIN_A_
  • Каждый объект плагина имеет свой уникальный в пределах хоста текстовый идентификатор

Add picture from clipboard (Maximum size: 742 MB)