Поделиться через


Метод IMultiQI::QueryMultipleInterfaces (objidl.h)

Извлекает указатели на несколько поддерживаемых интерфейсов в объекте .

Вызов этого метода эквивалентен выполнению ряда отдельных вызовов QueryInterface , за исключением того, что вы не несете накладных расходов на соответствующее количество вызовов RPC. Для оптимальной производительности в многопоточных приложениях и распределенных средах необходимо свести к минимуму вызовы RPC.

Синтаксис

HRESULT QueryMultipleInterfaces(
  [in]      ULONG    cMQIs,
  [in, out] MULTI_QI *pMQIs
);

Параметры

[in] cMQIs

Количество элементов в массиве pMQIs .

[in, out] pMQIs

Массив MULTI_QI структур. Дополнительные сведения см. в подразделе "Примечания".

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

Этот метод может возвращать следующие значения.

Код возврата Описание
S_OK
Метод извлекает указатели на все запрошенные интерфейсы.
S_FALSE
Метод извлекает указатели на некоторые( но не все) запрошенных интерфейсов.
E_NOINTERFACE
Метод извлекает указатели на ни один из запрошенных интерфейсов.

Комментарии

Метод QueryMultipleInterfaces принимает в качестве входных данных массив MULTI_QI структур. Каждая структура задает ИДЕНТИФИКАТОР интерфейса и содержит два дополнительных члена для получения указателя интерфейса и возвращаемого значения.

Этот метод получает как можно больше запрошенных указателей интерфейса непосредственно из прокси-сервера объекта. Для каждого интерфейса, не реализованного на прокси-сервере, метод вызывает сервер для получения указателя. Получив указатель интерфейса от сервера, метод создает соответствующий прокси-сервер интерфейса и возвращает его указатель вместе с указателями на интерфейсы, которые он уже реализует.

Примечания к вызывающим абонентам

Вызывающий объект должен начать с запроса прокси-сервера объекта для интерфейса IMultiQI . Если прокси-сервер объекта возвращает указатель на этот интерфейс, вызывающий объект должен создать структуру MULTI_QI для каждого интерфейса, который требуется получить. Каждая структура должна указать IID интерфейса и задать для его члена pItfзначение NULL. Если элементу pItf не присвоено значение NULL , прокси-сервер объекта будет игнорировать структуру.

При возврате QueryMultipleInterfaces записывает запрошенный указатель интерфейса и возвращаемое значение в каждую MULTI_QI структуру в массиве клиента. Член pItf получает указатель; член hr получает возвращаемое значение.

Если значение, возвращаемое вызовом QueryMultipleInterfaces , S_OK, то для всех запрошенных интерфейсов были возвращены указатели.

Если возвращаемое значение равно E_NOINTERFACE, указатели не были возвращены ни для одного из запрошенных интерфейсов. Если возвращаемое значение равно S_FALSE, то указатели на один или несколько запрошенных интерфейсов не были возвращены. В этом случае клиент должен проверка член hr каждой структуры MULTI_QI, чтобы определить, какие интерфейсы были получены, а какие нет.

Если клиент заранее знает, что он будет использовать несколько интерфейсов объекта, он может вызвать QueryMultipleInterfaces заранее, а затем, если QueryInterface будет выполнен для одного из интерфейсов, уже полученных через QueryMultipleInterfaces, вызов RPC не потребуется.

При возврате вызывающий объект должен проверка член hr каждой структуры MULTI_QI, чтобы определить, какие указатели интерфейса были возвращены, а какие не были возвращены.

Клиент отвечает за освобождение каждого из полученных интерфейсов путем вызова Release.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header objidl.h (включая ObjIdl.h)

См. также раздел

IMultiQI