Compartir a través de


Método IMultiQI::QueryMultipleInterfaces (objidl.h)

Recupera punteros a varias interfaces admitidas en un objeto .

Llamar a este método equivale a emitir una serie de llamadas QueryInterface independientes, excepto que no incurre en la sobrecarga de un número correspondiente de llamadas RPC. En las aplicaciones multiproceso y los entornos distribuidos, mantener las llamadas RPC a un mínimo es esencial para un rendimiento óptimo.

Sintaxis

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

Parámetros

[in] cMQIs

Número de elementos de la matriz pMQIs .

[in, out] pMQIs

Matriz de estructuras de MULTI_QI . Para obtener más información, vea la sección Comentarios.

Valor devuelto

Este método puede devolver los siguientes valores.

Código devuelto Descripción
S_OK
El método recuperó punteros a todas las interfaces solicitadas.
S_FALSE
El método recuperó punteros a algunas interfaces solicitadas, pero no todas.
E_NOINTERFACE
El método recuperó punteros a ninguna de las interfaces solicitadas.

Comentarios

El método QueryMultipleInterfaces toma como entrada una matriz de estructuras de MULTI_QI . Cada estructura especifica un IID de interfaz y contiene dos miembros adicionales para recibir un puntero de interfaz y un valor devuelto.

Este método obtiene tantos punteros de interfaz solicitados como sea posible directamente desde el proxy de objeto. Para cada interfaz no implementada en el proxy, el método llama al servidor para obtener un puntero. Al recibir un puntero de interfaz desde el servidor, el método crea un proxy de interfaz correspondiente y devuelve su puntero junto con punteros a las interfaces que ya implementa.

Notas a los autores de llamadas

Un llamador debe comenzar consultando el proxy de objeto para la interfaz IMultiQI . Si el proxy de objeto devuelve un puntero a esta interfaz, el autor de la llamada debe crear una estructura de MULTI_QI para cada interfaz que quiera obtener. Cada estructura debe especificar un IID de interfaz y establecer su miembro pItf en NULL. Si no se establece el miembro pItf en NULL , el proxy de objeto omitirá la estructura.

Al devolver, QueryMultipleInterfaces escribe el puntero de interfaz solicitado y un valor devuelto en cada estructura MULTI_QI de la matriz del cliente. El miembro pItf recibe el puntero; el miembro hr recibe el valor devuelto.

Si el valor devuelto de una llamada a QueryMultipleInterfaces es S_OK, se devolvieron punteros para todas las interfaces solicitadas.

Si el valor devuelto es E_NOINTERFACE, se devolvieron punteros para ninguna de las interfaces solicitadas. Si el valor devuelto es S_FALSE, no se devolvieron punteros a una o varias interfaces solicitadas. En este evento, el cliente debe comprobar el miembro hr de cada estructura de MULTI_QI para determinar qué interfaces se adquirieron y cuáles no.

Si un cliente sabe con antelación que va a usar varias de las interfaces de un objeto, puede llamar a QueryMultipleInterfaces por adelantado y, después, si se realiza una queryInterface para una de las interfaces ya adquiridas a través de QueryMultipleInterfaces, no será necesaria ninguna llamada RPC.

A cambio, el autor de la llamada debe comprobar el miembro hr de cada estructura de MULTI_QI para determinar qué punteros de interfaz eran y no se devolvieron.

El cliente es responsable de liberar cada una de las interfaces adquiridas llamando a Release.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows 2000 Server [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado objidl.h (incluya ObjIdl.h)

Consulte también

IMultiQI