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_’ - Каждый объект плагина имеет свой уникальный в пределах хоста текстовый идентификатор