Partilhar via


Classe CComTearOffObject

Essa classe implementa uma interface destacável.

template<
   class Base 
>
class CComTearOffObject :
      public Base

Parâmetros

  • Base
    A classe destacável, derivada de CComTearOffObjectBase e as interfaces que você deseja que o seu objeto destacáveis para oferecer suporte a.

ATL implementa interfaces destacável em duas fases — o CComTearOffObjectBase métodos de lidar com a contagem de referência e QueryInterface, enquanto CComTearOffObject implementa IUnknown.

Comentários

CComTearOffObject implementa uma interface destacável sistema autônomo um objeto separado é instanciado somente quando essa interface é consultada quanto a. O destacável será excluída quando sua contagem de referência é reduzido a zero.Normalmente, criar uma interface destacáveis para uma interface é raramente usada, pois usar um destacável salva um ponteiro vtable em todas as instâncias do seu objeto principal.

Você deve derivar a classe de implementação destacáveis de CComTearOffObjectBase e de interfaces que você deseja seu objeto destacáveis para oferecer suporte. CComTearOffObjectBase é templatized sobre o classe de proprietário e o modelo de segmento. Proprietário classe é a classe do objeto para o qual um destacável está sendo implementado.Se você não especificar um modelo de thread, o modelo de segmento padrão será usado.

Você deve criar um MAP de COM para sua classe destacável.Quando ATL instancia o destacáveis, ele criará CComTearOffObject <cyourtearoffclass> or CComCachedTearOffObject <cyourtearoffclass>.

Por exemplo, no exemplo de PAGER, a CBeeper2 é a classe destacável e o CBeeper classe é o classe de proprietário:

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:

};

Requisitos

Cabeçalho: atlcom.h

Consulte também

Referência

Classe CComCachedTearOffObject

Outros recursos

CComTearOffObject membros

Visão geral do ATL classe