Метод 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 структур. Дополнительные сведения см. в подразделе "Примечания".
Возвращаемое значение
Этот метод может возвращать следующие значения.
Код возврата | Описание |
---|---|
|
Метод извлекает указатели на все запрошенные интерфейсы. |
|
Метод извлекает указатели на некоторые( но не все) запрошенных интерфейсов. |
|
Метод извлекает указатели на ни один из запрошенных интерфейсов. |
Комментарии
Метод 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) |