Partilhar via


QueryInterface

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Embora existam mecanismos pelos quais um objeto pode expressar estaticamente a funcionalidade que fornece (antes de ser instanciado), o mecanismo fundamental do COM é usar o IUnknown método chamado QueryInterface.

Toda interface é derivada de IUnknown, pelo que toda interface tem uma implementação de QueryInterface. Independentemente da implementação, este método consulta um objeto usando o IID da interface para a qual o chamador quer um apontador. Se o objeto suportar essa interface, QueryInterface recupera um ponteiro para a interface, chamando também AddRef. Caso contrário, devolve o E_NOINTERFACE código de erro.

Note que deve obedecer às regras de Contagem de Referências em todos os momentos. Se chamar Release um ponteiro de interface para decrementar a contagem de referências a zero, não deve voltar a usar esse apontador. Ocasionalmente pode ser necessário obter uma referência fraca a um objeto (ou seja, pode querer obter um ponteiro para uma das suas interfaces sem aumentar a contagem de referência), mas não é aceitável fazer isto chamando QueryInterface seguido de Release. O ponteiro obtido desta forma é inválido e não deve ser usado. Isto torna-se mais evidente quando _ATL_DEBUG_INTERFACES está definido, por isso definir esta macro é uma forma útil de encontrar bugs de contagem de referências.

Consulte também

Introdução ao COM
QueryInterface: Navegação num Objeto