QueryInterface
Embora haja mecanismos por que um objeto pode expressar a funcionalidade ele fornece estaticamente (antes que é instanciada), o mecanismo de COM o fundamento é usar o método de IUnknown chamado QueryInterface.
Cada interface é derivada de IUnknown, para que cada interface tem uma implementação de QueryInterface.Independentemente da implementação, esse método consulta a um objeto usando o IID de interface para que o chamador deseja um ponteiro.Se o oferece suporte a interface, QueryInterface do objeto recupera um ponteiro para a interface, o também chamar AddRef.Caso contrário, retornará o código de erro de E_NOINTERFACE .
Observe que você deve obedecer regras de Contagem de referência em cada vez.Se você chamar Versão em um ponteiro de interface para diminuir a contagem de referência como zero, você não deve usar esse ponteiro novamente.Ocasionalmente você pode precisar obter uma referência fraca a um objeto (ou seja, você pode desejar obter um ponteiro para uma de suas interfaces sem incrementar contagem de referência), mas não é aceitável fazer isso chamando QueryInterface seguido por Versão.O ponteiro obtido em tal forma não é válido e não deve ser usado.Isso torna mais imediatamente aparente quando _ATL_DEBUG_INTERFACES é definido, então defina isso macro é uma maneira útil para localizar erros de contagem de referência.