CComTearOffObject

templatelt; classe Base >
classe CComTearOffObject : pubblica Base

Parametri

Base

Classe strappo, derivato dal CComTearOffObjectBase e le interfacce che si desidera che l'oggetto strappo a sostegno.

ATL implementa le interfacce strappo in due fasi — i metodi CComTearOffObjectBase gestiscono il conteggio dei riferimenti e QueryInterface, mentre implementa CComTearOffObject IUnknown.

CComTearOffObject implementa un'interfaccia tear-off come un oggetto separato che viene creata un'istanza solo quando viene eseguita una query quell'interfaccia per. Tear-off viene eliminato quando il conteggio diventa zero. In genere, si crea un'interfaccia strappo per un'interfaccia che è raramente utilizzata, poiché utilizzando uno strappo salva un puntatore vtable in tutte le istanze dell'oggetto principale.

È consigliabile derivare la classe che implementa la strappo da CComTearOffObjectBase e da qualunque interfacce si desidera che l'oggetto strappo a sostenere. CComTearOffObjectBase è templatized sulla classe proprietario e il modello di threading. Il proprietario è la classe dell'oggetto per il quale uno strappo viene attuato. Se non si specifica un modello di threading, viene utilizzato il modello di threading predefinito.

È consigliabile creare una mappa COM per la classe di strappo. Quando si crea un'istanza di ATL tear-off, creerà CComTearOffObjectlt;CYourTearOffClass > o CComCachedTearOffObject <CYourTearOffClass>.

Ad esempio, nell'esempio BEEPER, la CBeeper2 classe è la classe di strappo e la CBeeper classe è la classe del proprietario:

classe CBeeper2: pubblica ISupportErrorInfo,
 nbsp;               pubblica CComTearOffObjectBase <CBeeper>
{
pubblica:
   {CBeeper2()}
   STDMETHOD(InterfaceSupportsErrorInfo) (REFIID riid)
   {
      ritorno (InlineIsEqualGUID(IID_IBeeper,riid))? 
              S_OK: S_FALSE;
   }

BEGIN_COM_MAP(CBeeper2)
      COM_INTERFACE_ENTRY(ISupportErrorInfo)
   END_COM_MAP()
};

classe CBeeper:
   public IDispatchImpl < IBeeper, IID_IBeeper & LIBID_BeeperLib >,
   CComObjectRoot pubblica,
   CComCoClass pubblica < CBeeper & CLSID_Beeper >
{
pubblica:
   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>

Membri della classe

Vedere a&nchenbsp;CComCachedTearOffObject

Index