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>
Vedere a&nchenbsp;CComCachedTearOffObject