Classe CComAggObject

Essa classe implementa a interface IUnknown para um objeto agregado. Por definição, um objeto agregado é contido em um objeto externo. A classe CComAggObject é semelhante à Classe CComObject, exceto que expõe uma interface que é diretamente acessível a clientes externos.

Sintaxe

template<class contained>
class CComAggObject : public IUnknown,
   public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>

Parâmetros

contained
Sua classe, derivada de CComObjectRoot ou CComObjectRootEx, bem como de qualquer outra interface que você deseja dar suporte no objeto.

Membros

Construtores públicos

Nome Descrição
CComAggObject::CComAggObject O construtor .
CComAggObject::~CComAggObject O destruidor.

Métodos públicos

Nome Descrição
CComAggObject::AddRef Incrementa a contagem de referência no objeto agregado.
CComAggObject::CreateInstance Essa função estática permite que você crie um objeto CComAggObject<contained> sem a sobrecarga de CoCreateInstance.
CComAggObject::FinalConstruct Executa a inicialização final de m_contained.
CComAggObject::FinalRelease Executa a destruição final de m_contained.
CComAggObject::QueryInterface Recupera um ponteiro para a interface solicitada.
CComAggObject::Release Decrementa a contagem de referência no objeto agregado.

Membros de Dados Públicos

Nome Descrição
CComAggObject::m_contained Delega chamadas IUnknown para o desconhecido externo.

Comentários

CComAggObject implementa IUnknown para um objeto agregado. CComAggObject tem sua própria interface IUnknown, separada da interface IUnknown do objeto externo e mantém sua própria contagem de referência.

Para obter mais informações sobre agregação, confira o artigo Conceitos básicos de Objetos COM da ATL.

Hierarquia de herança

CComObjectRootBase

CComObjectRootEx

IUnknown

CComAggObject

Requisitos

Cabeçalho: atlcom.h

CComAggObject::AddRef

Incrementa a contagem de referência no objeto agregado.

STDMETHOD_(ULONG, AddRef)();

Valor de Devolução

Um valor que pode ser útil para diagnóstico ou teste.

CComAggObject::CComAggObject

O construtor .

CComAggObject(void* pv);

Parâmetros

pv
[entrada] O desconhecido externo.

Comentários

Inicializa o membro CComContainedObject, m_contained, e incrementa a contagem de bloqueio do módulo.

O destruidor decrementa a contagem de bloqueio do módulo.

CComAggObject::~CComAggObject

O destruidor.

~CComAggObject();

Comentários

Libera todos os recursos alocados, chama FinalRelease e decrementa a contagem de bloqueio do módulo.

CComAggObject::CreateInstance

Essa função estática permite que você crie um objeto CComAggObject<contained> sem a sobrecarga de CoCreateInstance.

static HRESULT WINAPI CreateInstance(
    LPUNKNOWN pUnkOuter,
    CComAggObject<contained>** pp);

Parâmetros

pp
[saída] Um ponteiro para um ponteiro CComAggObject<contained>. Se CreateInstance não for bem-sucedido, pp será definido como NULL.

Valor de Devolução

Um valor HRESULT padrão.

Comentários

O objeto retornado tem uma contagem de referência igual a zero, portanto, chame AddRef imediatamente e use Release para liberar a referência no ponteiro do objeto quando terminar.

Se você não precisar de acesso direto ao objeto, mas ainda quiser criar um objeto sem a sobrecarga de CoCreateInstance, use CComCoClass::CreateInstance.

CComAggObject::FinalConstruct

Chamado durante os estágios finais da construção do objeto, esse método executa qualquer inicialização final no membro m_contained.

HRESULT FinalConstruct();

Valor de Devolução

Um valor HRESULT padrão.

CComAggObject::FinalRelease

Chamado durante a destruição de objetos, esse método libera o membro m_contained.

void FinalRelease();

CComAggObject::m_contained

Um objeto CComContainedObject derivado de sua classe.

CComContainedObject<contained> m_contained;

Parâmetros

contained
[entrada] Sua classe, derivada de CComObjectRoot ou CComObjectRootEx, bem como de qualquer outra interface que você deseja dar suporte no objeto.

Comentários

Todas as chamadas IUnknown por meio do m_contained são delegadas para o desconhecido externo.

CComAggObject::QueryInterface

Recupera um ponteiro para a interface solicitada.

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp);

Parâmetros

iid
[in] O identificador da interface sendo solicitada.

ppvObject
[out] Um ponteiro para o ponteiro da interface identificado por iid. Se o objeto não der suporte a essa interface, o ppvObject será definido como NULL.

pp
[out] Um ponteiro para o ponteiro da interface identificado pelo tipo Q. Se o objeto não der suporte a essa interface, o pp será definido como NULL.

Valor de Devolução

Um valor HRESULT padrão.

Comentários

Se a interface solicitada for IUnknown, QueryInterface retornará um ponteiro para o próprio IUnknown do objeto agregado e incrementará a contagem de referência. Caso contrário, esse método consultará a interface por meio do membro CComContainedObject, o m_contained.

CComAggObject::Release

Decrementa a contagem de referência no objeto agregado.

STDMETHOD_(ULONG, Release)();

Valor de Devolução

Em builds de depuração, Release retorna um valor que pode ser útil para diagnóstico ou teste. Em builds que não sejam de depuração, o Release sempre retorna 0.

Confira também

Classe CComObject
Classe CComPolyObject
DECLARE_AGGREGATABLE
DECLARE_ONLY_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Visão geral da classe