Compartilhar via


Implementando a Interface IUnknown

Aplica-se a: Outlook 2013 | Outlook 2016

Os métodos da interface IUnknown , implementados em cada objeto MAPI, dão suporte à comunicação interobjeta e ao gerenciamento de objetos.

IUnknown tem três métodos: IUnknown::AddRef, IUnknown::QueryInterface e IUnknown::Release. QueryInterface permite que um objeto determine se outro objeto dá suporte a uma interface específica. Com QueryInterface, dois objetos sem conhecimento prévio da funcionalidade um do outro podem interagir. Se o objeto que implementa QueryInterface oferecer suporte à interface em questão, ele retornará um ponteiro para a implementação da interface. Se o objeto não der suporte à interface solicitada, ele retornará o valor MAPI_E_INTERFACE_NOT_SUPPORTED.

Quando QueryInterface retorna um ponteiro de interface solicitado, ele também deve aumentar a contagem de referência do novo objeto. A contagem de referência de um objeto é um valor numérico usado para gerenciar a vida útil do objeto. Quando a contagem de referência é maior que 1, a memória do objeto não pode ser liberada porque está sendo usada ativamente. É somente quando a contagem de referência cai para 0 que o objeto pode ser liberado com segurança.

Os outros dois métodos IUnknown , AddRef e Release, gerenciam a contagem de referência. AddRef incrementa a contagem de referência, enquanto Release a decrementa. Todos os métodos ou funções de API que retornam ponteiros de interface, como QueryInterface, devem chamar AddRef para incrementar a contagem de referência. Todas as implementações de métodos que recebem ponteiros de interface devem chamar Release para decrementar a contagem quando o ponteiro não for mais necessário. A versão verifica uma contagem de referência existente, liberando a memória associada à interface somente se a contagem for 0.

Observação

Como AddRef e Release não são necessários para retornar valores precisos, os chamadores desses métodos não devem usar os valores de retorno para determinar se um objeto ainda é válido ou foi destruído.

Confira também

Implementando objetos MAPI