Compartilhar via


Classe CComObject

Essa classe implementa IUnknown para um objeto não agregado.

Sintaxe

template<class Base>
class CComObject : public Base

Parâmetros

Base
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
CComObject::CComObject O construtor .
CComObject::~CComObject O destruidor.

Métodos públicos

Nome Descrição
CComObject::AddRef Incrementa a contagem de referência no objeto.
CComObject::CreateInstance (Estático) Cria um novo objeto CComObject.
CComObject::QueryInterface Recupera um ponteiro para a interface solicitada.
CComObject::Release Diminui a contagem de referência no objeto.

Comentários

CComObject implementa IUnknown para um objeto não agregado. No entanto, chamadas para QueryInterface, AddRef e Release são delegados a CComObjectRootEx.

Para obter mais informações sobre como usar CComObject, consulte o artigo Conceitos básicos de objetos COM do ATL.

Hierarquia de herança

Base

CComObject

Requisitos

Cabeçalho: atlcom.h

CComObject::AddRef

Incrementa a contagem de referência no objeto.

STDMETHOD_(ULONG, AddRef)();

Valor de retorno

Essa função retorna a nova contagem de referência incrementada no objeto. Um valor que pode ser útil para diagnóstico ou teste.

CComObject::CComObject

O construtor incrementa a contagem de bloqueio do módulo.

CComObject(void* = NULL);

Parâmetros

void*
[in] Esse parâmetro sem nome não é usado. Há por simetria com outros CComXXXObjectXXXconstrutores .

Comentários

O destruidor o diminui.

Se um objeto CComObject derivado for construído com êxito usando o operador new, a contagem de referência inicial será 0. Para definir a contagem de referência como o valor apropriado (1), faça uma chamada para a função AddRef .

CComObject::~CComObject

O destruidor.

CComObject();

Comentários

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

CComObject::CreateInstance

Essa função estática permite que você crie um novo objeto CComObject<Base>, sem a sobrecarga de CoCreateInstance.

static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);

Parâmetros

pp
[out] Um ponteiro para um ponteiro CComObject<Base>. 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.

Exemplo

class ATL_NO_VTABLE CMyCircle :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyCircle, &CLSID_MyCircle>,
   public IDispatchImpl<IMyCircle, &IID_IMyCircle, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
   CMyCircle()
   {
   }

DECLARE_REGISTRY_RESOURCEID(IDR_MYCIRCLE)

DECLARE_NOT_AGGREGATABLE(CMyCircle)

BEGIN_COM_MAP(CMyCircle)
   COM_INTERFACE_ENTRY(IMyCircle)
   COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()



   DECLARE_PROTECT_FINAL_CONSTRUCT()

   HRESULT FinalConstruct()
   {
      return S_OK;
   }

   void FinalRelease()
   {
   }

public:

public:
   STDMETHOD(get_XCenter)(double* pVal);
};

 

// Create a local instance of COM object CMyCircle.
double x;
CComObject<CMyCircle>* pCircle;
HRESULT hRes = CComObject<CMyCircle>::CreateInstance(&pCircle);
ATLASSERT(SUCCEEDED(hRes));

// Increment reference count immediately
pCircle->AddRef();

// Access method of COM object
hRes = pCircle->get_XCenter(&x);

// Decrement reference count when done
pCircle->Release();
pCircle = NULL;

CComObject::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.

CComObject::Release

Diminui a contagem de referência no objeto.

STDMETHOD_(ULONG, Release)();

Valor de retorno

Essa função retorna a nova contagem de referência decrementada no objeto. Em builds de depuração, o valor retornado poderá 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 CComAggObject
Classe CComPolyObject
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Visão geral da aula