templatelt, clase Base >
clase CComTearOffObject : público Base
Parámetros
Base
La clase tear-off, derivada de CComTearOffObjectBase y las interfaces que desea su desgarro fuera objeto apoyar.
ATL implementa sus interfaces de lágrima en dos fases: los métodos de CComTearOffObjectBase manejan el recuento de referencias y QueryInterface, mientras implementa CComTearOffObject IUnknown.
CComTearOffObject implementa una interfaz tear-off como un objeto independiente que se crea una instancia sólo cuando dicha interfaz se consulta para. La lágrima-off se eliminará cuando su recuento de referencia se convierte en cero. Por lo general, crear una interfaz de lágrima de despegue para una interfaz que se utiliza rara vez, ya que usando una lágrima-off guarda un puntero vtable en todas las instancias del objeto principal.
Debe derivar la clase que implementa la lágrima-fuera de CComTearOffObjectBase y de cuantas interfaces desea su desgarro fuera objeto apoyar. CComTearOffObjectBase es templatized en la clase de propietario y el modelo de subproceso. El propietario es la clase del objeto para el que una lágrima-off se está aplicando. Si no se especifica un modelo de hilos, se utiliza el modelo de subproceso predeterminado.
Debe crear un mapa de COM para la clase de lágrima. Cuando se crea una instancia de ATL tear-off, creará CComTearOffObjectlt;CYourTearOffClass > o CComCachedTearOffObject <CYourTearOffClass>.
Por ejemplo, en la muestra BEEPER, el CBeeper2 es la clase de desgaste y la CBeeper es la clase de propietario:
clase CBeeper2: ISupportErrorInfo pública,
nbsp; CComTearOffObjectBase pública <CBeeper>
{
público:
CBeeper2() {}
STDMETHOD(InterfaceSupportsErrorInfo) (REFIID riid)
{
¿Retorno (InlineIsEqualGUID(IID_IBeeper,riid))?
S_OK: S_FALSE;
}
BEGIN_COM_MAP(CBeeper2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
};
clase CBeeper:
IDispatchImpl público < IBeeper, IID_IBeeper & LIBID_BeeperLib >,
CComObjectRoot pública,
CComCoClass públicos < CBeeper & CLSID_Beeper >
{
público:
CBeeper();
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY_TEAR_OFF (IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()
...
}
# include lt;atlcom.h>
Vea tambié&nnbsp;CComCachedTearOffObject