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 novo 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
IUnknown
CComAggObject
Requisitos
Cabeçalho: atlcom.h
CComAggObject::AddRef
Incrementa a contagem de referência no objeto agregado.
STDMETHOD_(ULONG, AddRef)();
Valor de retorno
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 novo 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 retorno
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 retorno
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 retorno
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 retorno
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 aula