Condividi tramite


Metodo IMultiQI::QueryMultipleInterfaces (objidl.h)

Recupera i puntatori a più interfacce supportate in un oggetto.

La chiamata a questo metodo equivale all'emissione di una serie di chiamate QueryInterface separate, ad eccezione del fatto che non si comporta il sovraccarico di un numero corrispondente di chiamate RPC. Nelle applicazioni multithreading e negli ambienti distribuiti, mantenere le chiamate RPC a un minimo è essenziale per prestazioni ottimali.

Sintassi

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

Parametri

[in] cMQIs

Numero di elementi nella matrice pMQIs .

[in, out] pMQIs

Matrice di strutture MULTI_QI . Per altre informazioni, vedere la sezione Osservazioni.

Valore restituito

Questo metodo può restituire i valori seguenti.

Codice restituito Descrizione
S_OK
Il metodo recupera i puntatori a tutte le interfacce richieste.
S_FALSE
Il metodo recupera i puntatori ad alcuni, ma non tutti, delle interfacce richieste.
E_NOINTERFACE
Il metodo recupera i puntatori a nessuno delle interfacce richieste.

Commenti

Il metodo QueryMultipleInterfaces accetta come input una matrice di strutture MULTI_QI . Ogni struttura specifica un IID dell'interfaccia e contiene due membri aggiuntivi per ricevere un puntatore di interfaccia e un valore restituito.

Questo metodo ottiene il maggior numero possibile di puntatori dell'interfaccia richiesti direttamente dal proxy dell'oggetto. Per ogni interfaccia non implementata nel proxy, il metodo chiama il server per ottenere un puntatore. Dopo aver ricevuto un puntatore dell'interfaccia dal server, il metodo compila un proxy di interfaccia corrispondente e restituisce il puntatore insieme ai puntatori alle interfacce già implementate.

Note ai chiamanti

Un chiamante deve iniziare eseguendo una query sul proxy dell'oggetto per l'interfaccia IMultiQI . Se il proxy dell'oggetto restituisce un puntatore a questa interfaccia, il chiamante deve quindi creare una struttura MULTI_QI per ogni interfaccia che vuole ottenere. Ogni struttura deve specificare un IID dell'interfaccia e impostare il membro pItf su NULL. Se non si imposta il membro pItf su NULL , il proxy dell'oggetto verrà ignorato.

In caso di ritorno, QueryMultipleInterfaces scrive il puntatore dell'interfaccia richiesto e un valore restituito in ogni struttura MULTI_QI nella matrice del client. Il membro pItf riceve il puntatore; il membro hr riceve il valore restituito.

Se il valore restituito da una chiamata a QueryMultipleInterfaces è S_OK, i puntatori vengono restituiti per tutte le interfacce richieste.

Se il valore restituito è E_NOINTERFACE, i puntatori sono stati restituiti per nessuna delle interfacce richieste. Se il valore restituito è S_FALSE, i puntatori a una o più interfacce richieste non sono stati restituiti. In questo caso, il client deve controllare il membro hr di ogni struttura MULTI_QI per determinare quali interfacce sono state acquisite e quali non erano.

Se un client conosce in anticipo che verrà usato diverse interfacce di un oggetto, può chiamare QueryMultipleInterfaces in anticipo e quindi, in un secondo momento, se una queryInterface viene eseguita per una delle interfacce già acquisite tramite QueryMultipleInterfaces, non sarà necessaria alcuna chiamata RPC.

Al ritorno, il chiamante deve controllare il membro hr di ogni struttura MULTI_QI per determinare quali puntatori di interfaccia erano e non sono stati restituiti.

Il client è responsabile del rilascio di ognuna delle interfacce acquisite chiamando Release.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione objidl.h (include ObjIdl.h)

Vedi anche

IMultiQI