QueryInterface

Anche se esistono meccanismi in base ai quali un oggetto può esprimere la funzionalità fornita in modo statico (prima che venga creata un'istanza), il meccanismo COM fondamentale consiste nell'usare il IUnknown metodo denominato QueryInterface.

Ogni interfaccia è derivata da IUnknown, quindi ogni interfaccia ha un'implementazione di QueryInterface. Indipendentemente dall'implementazione, questo metodo esegue una query su un oggetto usando l'interfaccia IID a cui il chiamante vuole un puntatore. Se l'oggetto supporta tale interfaccia, QueryInterface recupera un puntatore all'interfaccia, chiamando AddRefanche . In caso contrario, restituisce il E_NOINTERFACE codice di errore.

Si noti che è necessario rispettare sempre le regole di conteggio dei riferimenti. Se si chiama Release su un puntatore di interfaccia per decrementare il conteggio dei riferimenti a zero, non è consigliabile usare di nuovo tale puntatore. In alcuni casi potrebbe essere necessario ottenere un riferimento debole a un oggetto ( ovvero, è possibile ottenere un puntatore a una delle relative interfacce senza incrementare il conteggio dei riferimenti), ma non è accettabile eseguire questa operazione chiamando QueryInterface seguito da Release. Il puntatore ottenuto in questo modo non è valido e non deve essere usato. Ciò diventa più facilmente evidente quando _ATL_DEBUG_INTERFACES viene definito, quindi la definizione di questa macro è un modo utile per trovare i bug di conteggio dei riferimenti.

Vedi anche

Introduzione a COM
QueryInterface: Spostamento in un oggetto