Partager via


CComTearOffObject, classe

Cette classe implémente une interface volante.

template< 
   class Base  
> 
class CComTearOffObject : 
   public Base

Paramètres

  • Base
    Votre arrachez la classe, dérivée de CComTearOffObjectBase et les interfaces que vous souhaitez que votre arrachent l'objet en charge.

ATL implémente les interfaces volantes en deux phases — les méthodes d' CComTearOffObjectBase gèrent le décompte de références et QueryInterface, tandis que CComTearOffObject implémente IUnknown.

Membres

Constructeurs publics

Nom

Description

CComTearOffObject::CComTearOffObject

Constructeur.

CComTearOffObject::~CComTearOffObject

Le destructeur.

Méthodes publiques

Nom

Description

CComTearOffObject::AddRef

Incrémente le décompte de références d'un objet d' CComTearOffObject .

CComTearOffObject::QueryInterface

Retourne un pointeur vers l'interface demandée sur votre arrachent la classe ou la classe propriétaire.

CComTearOffObject::Release

Décrémente le décompte de références d'un objet d' CComTearOffObject et le perd.

Méthodes de CComTearOffObjectBase

CComTearOffObjectBase

Constructeur.

Membres de données de CComTearOffObjectBase

m_pOwner

Un pointeur vers CComObject dérivé de la classe propriétaire.

Notes

CComTearOffObject implémente une interface volante comme un objet séparé qui est instancié uniquement lorsque cette interface est interrogé pour. L'arrachement est supprimé lorsque son décompte de références est zéro. En général, vous générez une interface volante pour une interface qui est rarement utilisée, car vous utilisez un arrachement enregistre un pointeur vtable dans toutes les instances de votre objet principal.

Vous devez dériver la classe implémentant l'arrachement d' CComTearOffObjectBase et de toutes les interfaces vous souhaitez que votre arrachez l'objet en charge. CComTearOffObjectBase est mis en modèle sur la classe propriétaire et le modèle de thread. La classe propriétaire est la classe de l'objet pour lequel un arrachement est implémenté. Si vous ne spécifiez pas un modèle de thread, le modèle de thread par défaut est utilisé.

Vous devez créer un mappage COM de votre arrachez la classe. Lorsque ATL instancie l'arrachement, il crée CComTearOffObject<CYourTearOffClass> ou CComCachedTearOffObject<CYourTearOffClass>.

Par exemple, dans l'exemple BEEPER, la classe d' CBeeper2 est la classe d'arrachement et la classe d' CBeeper est la classe propriétaire :

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:

};

Hiérarchie d'héritage

Base

CComTearOffObject

Configuration requise

Header: atlcom.h

Voir aussi

Référence

CComCachedTearOffObject, classe

Autres ressources

Vue d'ensemble de la classe ATL