lpQueryInterface

Используется для запроса плагином точек входа процедур сервисов (интерфейсов), предоставляемых базой. Некоторый функциональный аналог КОМ интерфейса iUnknown.

HRESULT lpQueryInterface(
    REFIID iid,
    void **ppvObject
);

Параметры

iid
[вх]
Идентификатор запрашиваемого интерфейса.
ppvObject
[вх/вых]
Адрес переменной принимающей адрес таблицы точек входа в функции (интерфейса) запрашиваемого интерфейса.
Если указанный интерфейс не поддерживается указанная переменная будет установлена в ноль.

Возвращаемые значения

S_OK - Успех.
E_NOINTERFACE - Запрашиваемый интерфейс не поддерживается.
E_NOTIMPL - Запрашиваемый интерфейс не реализован.
E_INVALIDARG - Аргументы функции заданы неверно.

Заметки

Это не полноценный QueryInterface() из КОМ! Однако вызываемые таблицы ссылок наследуют правила КОМ интерфейсов:
Любые интерфейсы доступны через iPluginUncnown:lpQueryInterface()
Возвращаемый указатель на тот-же интерфейс всегда один и тот-же, вне зависимости как и откуда вызван этот интерфейс.
lpQueryInterface() является первым членом любого вызываемого интерфейса, из любого интерфейса можно вызвать любой интерфейс.
Однако они симметричны лишь от части: полученный указатель можно использовать в любом месте своего плагина, включая его дочерние библиотеки, но НЕ в других программах (не отображающихся в памяти основной программы и не управляемые ей).
Так как текущие возвращаемые интерфейсы не имеют AddRef() и Release() размножать их можно просто копированием указателя. Основная программа гарантирует, что интерфейсы будут действительны всё время пребывания твоей библиотеки в памяти.

Поддерживаемые интерфейсы:

IID_PluginIUncnown - Аналог iUnknown. Содержит единственный член - адрес QueryInterface(). Также его возвращает сообщение UM_GETIUNKNOWN.
IID_PluginLdControl - Управляет жизненным циклом загрузок.
IID_PluginGroupMkr - Создания групп загрузок и древовидных списков.

Быстрая справка

ОС C поддержкой WinAPI v4
DLL 2fap.exe
Библиотека -
Заголовок plugincom-plugin.h

Смотри также