Partilhar via


Classe CComObject

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.

Esta classe implementa-se IUnknown para um objeto não agregado.

Sintaxe

template<class Base>
class CComObject : public Base

Parâmetros

Base
A sua classe, derivada de CComObjectRoot ou CComObjectRootEx, bem como de quaisquer outras interfaces que queira suportar no objeto.

Membros

Construtores Públicos

Nome Description
CComObject::CComObject O construtor.
CComObject::~CComObject O destruidor.

Métodos Públicos

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

Observações

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

Para mais informações sobre a utilização CComObjectde , consulte o artigo Fundamentos dos Objetos ATL COM.

Hierarquia de herança

Base

CComObject

Requerimentos

Cabeçalho: atlcom.h

CComObject::AddRef

Incrementa a contagem de referência no objeto.

STDMETHOD_(ULONG, AddRef)();

Valor de retorno

Esta função devolve a nova contagem de referências incrementada no objeto. Este valor pode ser útil para diagnósticos ou testes.

CComObject::CComObject

O construtor incrementa a contagem de bloqueios de módulos.

CComObject(void* = NULL);

Parâmetros

vazio*
[dentro] Este parâmetro sem nome não é utilizado. Existe para simetria com outros CComXXXObjectXXX construtores.

Observações

O destruidor enfraquece-o.

Se um CComObjectobjeto derivado de - for construído com sucesso usando o new operador, a contagem inicial de referência é 0. Para definir a contagem de referências para o valor correto (1), faça uma chamada à função AddRef .

CComObject::~CComObject

O destruidor.

CComObject();

Observações

Liberta todos os recursos alocados, chama o FinalRelease e diminui a contagem de bloqueios de módulos.

CComObject::CreateInstance

Esta função estática permite-lhe criar um novo objeto CComObject<Base> , sem a sobrecarga do CoCreateInstance.

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

Parâmetros

pp
[fora] Um ponteiro para um ponteiro CComObject<Base> . Se CreateInstance não for bem-sucedido, pp é definido como NULL.

Valor de retorno

Um valor HRESULT padrão.

Observações

O objeto devolvido tem uma contagem de referência zero, por isso chama AddRef imediatamente e depois usa Release para libertar a referência no ponteiro do objeto quando terminares.

Se não precisares de acesso direto ao objeto, mas ainda assim quiseres criar um novo objeto sem a sobrecarga de CoCreateInstance, usa em vez disso CComCoClass::CreateInstance .

Example

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
[dentro] O identificador da interface a ser solicitada.

ppvObject
[fora] Um apontador para o ponteiro de interface identificado por iid. Se o objeto não suportar esta interface, o ppvObject é definido como NULL.

pp
[fora] Um apontador para o ponteiro de interface identificado pelo tipo Q. Se o objeto não suportar esta interface, pp é 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

Esta função devolve a nova contagem de referências decrementada no objeto. Em compilações de depuração, o valor de retorno pode ser útil para diagnósticos ou testes. Em builds que não são de depuração, Release devolve sempre 0.

Consulte também

Classe CComAggObject
Classe CComPolyObject
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Visão geral da classe