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