Condividi tramite


Classe CComTearOffObject

Questa classe implementa un'interfaccia di strappo.

Sintassi

template<class Base>
class CComTearOffObject : public Base

Parametri

Base
La classe di strappo, derivata da CComTearOffObjectBase e le interfacce da cui si vuole supportare l'oggetto tear-off.

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

Membri

Costruttori pubblici

Nome Descrizione
CComTearOffObject::CComTearOffObject Costruttore.
CComTearOffObject::~CComTearOffObject Distruttore.

Metodi pubblici

Nome Descrizione
CComTearOffObject::AddRef Incrementa il conteggio dei riferimenti per un CComTearOffObject oggetto .
CComTearOffObject::QueryInterface Restituisce un puntatore all'interfaccia richiesta nella classe di disinstallazione o nella classe proprietario.
CComTearOffObject::Release Decrementa il conteggio dei riferimenti per un CComTearOffObject oggetto e lo elimina definitivamente.

Metodi CComTearOffObjectBase

Funzione Descrizione
CComTearOffObjectBase Costruttore.

Membri dati CComTearOffObjectBase

Membro dati Descrizione
m_pOwner Puntatore a un CComObject derivato dalla classe owner.

Osservazioni:

CComTearOffObject implementa un'interfaccia di strappo come oggetto separato di cui viene creata un'istanza solo quando viene eseguita una query su tale interfaccia. L'eliminazione viene eliminata quando il conteggio dei riferimenti diventa zero. In genere, si crea un'interfaccia di disinstallazione per un'interfaccia che viene usata raramente, poiché l'uso di un'operazione di disinstallazione salva un puntatore di tabella virtuale in tutte le istanze dell'oggetto principale.

È necessario derivare la classe che implementa lo strappo da CComTearOffObjectBase e da qualsiasi interfaccia che si desidera che l'oggetto di strappo supporti. CComTearOffObjectBase viene templatizzato nella classe proprietario e nel modello di thread. La classe owner è la classe dell'oggetto per il quale viene implementato un'operazione di disinstallazione. Se non si specifica un modello di thread, viene usato il modello di thread predefinito.

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

Nell'esempio BEEPER, ad esempio, la CBeeper2 classe è la classe tear-off e la CBeeper classe è la classe owner:

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:

};

Gerarchia di ereditarietà

Base

CComTearOffObject

Requisiti

Intestazione: atlcom.h

CComTearOffObject::AddRef

Incrementa il numero di riferimenti dell'oggetto CComTearOffObject di uno.

STDMETHOD_(ULONG, AddRef)();

Valore restituito

Valore che può essere utile per la diagnostica e il test.

CComTearOffObject::CComTearOffObject

Costruttore.

CComTearOffObject(void* pv);

Parametri

Pv
[in] Puntatore che verrà convertito in un puntatore a un CComObject<Owner> oggetto .

Osservazioni:

Incrementa il numero di riferimenti del proprietario di uno.

CComTearOffObject::~CComTearOffObject

Distruttore.

~CComTearOffObject();

Osservazioni:

Libera tutte le risorse allocate, chiama FinalRelease e decrementa il conteggio dei blocchi del modulo.

CComTearOffObject::CComTearOffObjectBase

Costruttore.

CComTearOffObjectBase();

Osservazioni:

Inizializza il membro m_pOwner su NULL.

CComTearOffObject::m_pOwner

Puntatore a un oggetto CComObject derivato da Owner.

CComObject<Owner>* m_pOwner;

Parametri

Proprietario
[in] Classe per la quale viene implementato un'operazione di disinstallazione.

Osservazioni:

Il puntatore viene inizializzato su NULL durante la costruzione.

CComTearOffObject::QueryInterface

Recupera un puntatore all'interfaccia richiesta.

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);

Parametri

iid
[in] IID dell'interfaccia richiesta.

ppvObject
[out] Puntatore al puntatore dell'interfaccia identificato da iid o NULL se l'interfaccia non viene trovata.

Valore restituito

Valore HRESULT standard.

Osservazioni:

Prima di tutto, le query per le interfacce nella classe di strappo. Se l'interfaccia non è presente, esegue una query per l'interfaccia sull'oggetto proprietario. Se l'interfaccia richiesta è IUnknown, restituisce l'oggetto IUnknown del proprietario.

CComTearOffObject::Release

Decrementa il conteggio dei riferimenti di uno e, se il conteggio dei riferimenti è zero, elimina .CComTearOffObject

STDMETHOD_ULONG Release();

Valore restituito

Nelle compilazioni non di debug restituisce sempre zero. Nelle compilazioni di debug restituisce un valore che può essere utile per la diagnostica o il test.

Vedi anche

Classe CComCachedTearOffObject
Cenni preliminari sulla classe