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 CComXXXObjectXXX
construtores .
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