Clase CComTearOffObject
Esta clase implementa una interfaz desplazable.
Sintaxis
template<class Base>
class CComTearOffObject : public Base
Parámetros
Base
La clase desplazable, derivada de CComTearOffObjectBase
y las interfaces que quiera que admita el objeto desplazado.
ATL implementa las interfaces desplazables en dos fases: los métodos CComTearOffObjectBase
controlan el recuento de referencias y QueryInterface
, mientras CComTearOffObject
implementa IUnknown.
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CComTearOffObject::CComTearOffObject | Constructor . |
CComTearOffObject::~CComTearOffObject | El destructor . |
Métodos públicos
Nombre | Descripción |
---|---|
CComTearOffObject::AddRef | Incrementa el recuento de referencias de un objeto CComTearOffObject . |
CComTearOffObject::QueryInterface | Devuelve un puntero a la interfaz solicitada en la clase desplazable o en la clase de propietario. |
CComTearOffObject::Release | Disminuye el recuento de referencias de un objeto CComTearOffObject y lo destruye. |
Métodos CComTearOffObjectBase
Función | Descripción |
---|---|
CComTearOffObjectBase | Constructor. |
Miembros de miembros CComTearOffObjectBase
Miembro de datos | Descripción |
---|---|
m_pOwner | Puntero a un CComObject derivado de la clase de propietario. |
Comentarios
CComTearOffObject
implementa una interfaz desplazable como un objeto independiente al que solo se crea una instancia cuando se consulta esa interfaz. El desplazamiento se elimina cuando el recuento de referencias se convierte en cero. Normalmente, se crea una interfaz desplazable para una interfaz que rara vez se usa, ya que el uso de una desplazable guarda un puntero vtable en todas las instancias del objeto principal.
Debe derivar la clase que implementa el desplazable de CComTearOffObjectBase
y de las interfaces que quiera que admita el objeto desplazado. CComTearOffObjectBase
usa plantillas en la clase de propietario y en el modelo de subproceso. La clase de propietario es la clase del objeto para el que se implementa un desplazamiento. Si no especifica un modelo de subproceso, se usará el modelo de subproceso predeterminado.
Debe crear un mapa COM para la clase desplazable. Cuando ATL crea una instancia desplazable, creará CComTearOffObject<CYourTearOffClass>
o CComCachedTearOffObject<CYourTearOffClass>
.
Por ejemplo, en el ejemplo BEEPER, la clase CBeeper2
es la clase desplazable y la clase CBeeper
es la clase de propietario:
class CBeeper2 :
public ISupportErrorInfo,
public CComTearOffObjectBase<CBeeper>
{
public:
CBeeper2() {}
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
{
return (InlineIsEqualGUID(IID_IBeeper, riid)) ? S_OK : S_FALSE;
}
BEGIN_COM_MAP(CBeeper2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
};
class ATL_NO_VTABLE CBeeper :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBeeper, &CLSID_Beeper>,
public IDispatchImpl<IBeeper, &IID_IBeeper, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CBeeper()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_BEEPER)
DECLARE_NOT_AGGREGATABLE(CBeeper)
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY_TEAR_OFF(IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
};
Jerarquía de herencia
Base
CComTearOffObject
Requisitos
Encabezado: atlcom.h
CComTearOffObject::AddRef
Incrementa en uno el recuento de referencias del objeto CComTearOffObject
.
STDMETHOD_(ULONG, AddRef)();
Valor devuelto
Valor que puede ser útil para los diagnósticos y las pruebas.
CComTearOffObject::CComTearOffObject
Constructor .
CComTearOffObject(void* pv);
Parámetros
pv
[in] Puntero que se convertirá en un puntero a un objeto CComObject<Owner>
.
Comentarios
Incrementa en uno el recuento de referencias del propietario.
CComTearOffObject::~CComTearOffObject
El destructor .
~CComTearOffObject();
Comentarios
Libera todos los recursos asignados, llama a FinalRelease y disminuye el número de bloqueos del módulo.
CComTearOffObject::CComTearOffObjectBase
Constructor .
CComTearOffObjectBase();
Comentarios
Inicializa el miembro m_pOwner a NULL.
CComTearOffObject::m_pOwner
Puntero a un objeto CComObject derivado de Propietario.
CComObject<Owner>* m_pOwner;
Parámetros
Propietario
[in] Clase para la que se implementa un desplazamiento.
Comentarios
El puntero se inicializa en NULL durante la construcción.
CComTearOffObject::QueryInterface
Recupera un puntero a la interfaz solicitada.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
Parámetros
iid
[in] IID de la interfaz solicitada.
ppvObject
[out] Puntero al puntero de interfaz identificado por iid o NULL si la interfaz no se encuentra.
Valor devuelto
Valor HRESULT estándar.
Comentarios
Primero consulta las interfaces de la clase desplazable. Si la interfaz no se encuentra, consulte la interfaz en el objeto del propietario. Si la interfaz que se solicita es IUnknown
, devuelve el IUnknown
del propietario.
CComTearOffObject::Release
Disminuye el recuento de referencias en uno y, si el recuento de referencias es cero, elimina CComTearOffObject
.
STDMETHOD_ULONG Release();
Valor devuelto
En compilaciones que no son de depuración, siempre devuelve cero. En las compilaciones de depuración, devuelve un valor que puede ser útil para los diagnósticos o las pruebas.
Consulte también
CComCachedTearOffObject (clase)
Información general sobre la clase