Condividi tramite


Metodo IMultiQI::QueryMultipleInterfaces (objidlbase.h)

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

La chiamata a questo metodo equivale all'esecuzione di una serie di chiamate QueryInterface separate, ad eccezione del fatto che non si verifica l'overhead di un numero corrispondente di chiamate RPC. Nelle applicazioni multithreading e negli ambienti distribuiti, mantenere le chiamate RPC al minimo è essenziale per ottenere 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 ha recuperato puntatori a tutte le interfacce richieste.
S_FALSE
Il metodo ha recuperato puntatori ad alcuni, ma non a tutti, delle interfacce richieste.
E_NOINTERFACE
Il metodo ha recuperato puntatori a nessuna delle interfacce richieste.

Commenti

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

Questo metodo ottiene il maggior numero possibile di puntatori di interfaccia richiesti direttamente dal proxy dell'oggetto. Per ogni interfaccia non implementata nel proxy, il metodo chiama il server per ottenere un puntatore. Quando si riceve un puntatore di 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 di interfaccia e impostare il relativo membro pItf su NULL. Se non si imposta il membro pItf su NULL , il proxy dell'oggetto ignorerà la struttura.

In caso di restituzione, QueryMultipleInterfaces scrive il puntatore di 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 no.

Se un client sa 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 objidlbase.h (include ObjIdl.h)

Vedi anche

IMultiQI