Clase CComObject
Esta clase implementa IUnknown
para un objeto no agregado.
Sintaxis
template<class Base>
class CComObject : public Base
Parámetros
Base
Clase, derivada de CComObjectRoot o CComObjectRootEx, así como de cualquier otra interfaz que desee admitir en el objeto.
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CComObject::CComObject | Constructor . |
CComObject::~CComObject | El destructor . |
Métodos públicos
Nombre | Descripción |
---|---|
CComObject::AddRef | Incrementa el recuento de referencias del objeto. |
CComObject::CreateInstance | (Estático) Crea un objeto CComObject nuevo. |
CComObject::QueryInterface | Recupera un puntero a la interfaz solicitada. |
CComObject::Release | Disminuye el recuento de referencias del objeto. |
Comentarios
CComObject
implementa IUnknown para un objeto no agregado. Pero las llamadas a QueryInterface
, AddRef
y Release
se delegan a CComObjectRootEx
.
Para más información sobre el uso de CComObject
, vea el artículo Aspectos básicos de los objetos COM ATL.
Jerarquía de herencia
Base
CComObject
Requisitos
Encabezado: atlcom.h
CComObject::AddRef
Incrementa el recuento de referencias del objeto.
STDMETHOD_(ULONG, AddRef)();
Valor devuelto
Esta función devuelve el nuevo recuento de referencias incrementadas en el objeto. Este valor puede ser útil para diagnósticos o pruebas.
CComObject::CComObject
El constructor incrementa el número de bloqueos del módulo.
CComObject(void* = NULL);
Parámetros
void*
[in] Este parámetro sin nombre no se usa. Existe para favorecer la simetría con otros constructores CComXXXObjectXXX
.
Comentarios
El destructor lo disminuye.
Si un objeto derivado de CComObject
se construye correctamente mediante el operador new
, el recuento de referencias inicial es 0. Para establecer el recuento de referencias en el valor adecuado (1), realice una llamada a la función AddRef.
CComObject::~CComObject
El destructor .
CComObject();
Comentarios
Libera todos los recursos asignados, llama a FinalRelease y disminuye el número de bloqueos del módulo.
CComObject::CreateInstance
Esta función estática le permite crear un nuevo objeto CComObject<Base
>, sin la sobrecarga de CoCreateInstance.
static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);
Parámetros
pp
[out] Puntero a un puntero CComObject<Base
>. Si CreateInstance
no se realiza correctamente, pp se establece en NULL.
Valor devuelto
Valor HRESULT estándar.
Comentarios
El objeto devuelto tiene un recuento de referencias de cero, por lo que se llama inmediatamente a AddRef
y, después, se usa Release
para liberar la referencia en el puntero de objeto cuando haya terminado.
Si no necesita acceso directo al objeto, pero desea crear un nuevo objeto sin la sobrecarga de CoCreateInstance
, use CComCoClass::CreateInstance en su lugar.
Ejemplo
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 un puntero a la interfaz solicitada.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp);
Parámetros
iid
[entrada] Identificador de la interfaz solicitada.
ppvObject
[out] Puntero al puntero de interfaz identificado por iid. Si el objeto no admite esta interfaz, ppvObject se establece como null.
pp
[out] Puntero al puntero de interfaz identificado por el tipo Q
. Si el objeto no admite esta interfaz, pp se establece como NULL.
Valor devuelto
Valor HRESULT estándar.
CComObject::Release
Disminuye el recuento de referencias del objeto.
STDMETHOD_(ULONG, Release)();
Valor devuelto
Esta función devuelve el nuevo recuento de referencias reducido en el objeto. En las compilaciones de depuración, el valor devuelto puede ser útil para diagnósticos o pruebas. En compilaciones que no son de depuración, Release
siempre devuelve 0.
Consulte también
CComAggObject (clase)
CComPolyObject (clase)
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Información general sobre la clase