Partage via


CComTearOffObject, classe

Cette classe implémente une interface de déchirure.

Syntaxe

template<class Base>
class CComTearOffObject : public Base

Paramètres

Base
Votre classe de déchirure, dérivée et les interfaces à prendre CComTearOffObjectBase en charge par votre objet de déchirure.

ATL implémente ses interfaces de déchirure en deux phases : les CComTearOffObjectBase méthodes gèrent le nombre de références etQueryInterface, tout en CComTearOffObject implémentant IUnknown.

Membres

Constructeurs publics

Nom Description
CComTearOffObject ::CComTearOffObject Constructeur .
CComTearOffObject ::~CComTearOffObject Destructeur.

Méthodes publiques

Nom Description
CComTearOffObject ::AddRef Incrémente le nombre de références d’un CComTearOffObject objet.
CComTearOffObject ::QueryInterface Retourne un pointeur vers l’interface demandée sur votre classe de déchirure ou la classe propriétaire.
CComTearOffObject ::Release Décrémente le nombre de références d’un CComTearOffObject objet et le détruit.

CComTearOffObjectBase, méthodes

Fonction Description
CComTearOffObjectBase Constructeur.

CComTearOffObjectBase, membres de données

Membre de données Description
m_pOwner Pointeur vers un CComObject dérivé de la classe propriétaire.

Notes

CComTearOffObject implémente une interface de déchirure en tant qu’objet distinct instancié uniquement lorsque cette interface est interrogée. La suppression est supprimée lorsque son nombre de références devient zéro. En règle générale, vous créez une interface de déchirure pour une interface rarement utilisée, car l’utilisation d’une déchirure enregistre un pointeur de table virtuelle dans toutes les instances de votre objet principal.

Vous devez dériver la classe qui implémente la déchirure et CComTearOffObjectBase à partir de quelles interfaces vous souhaitez prendre en charge votre objet de déchirure. CComTearOffObjectBase est templaté sur la classe propriétaire et le modèle de thread. La classe propriétaire est la classe de l’objet pour lequel une déchirure est implémentée. Si vous ne spécifiez pas de modèle de thread, le modèle de thread par défaut est utilisé.

Vous devez créer une carte COM pour votre classe de déchirure. Quand ATL instancie la déchirure, elle crée CComTearOffObject<CYourTearOffClass> ou CComCachedTearOffObject<CYourTearOffClass>.

Par exemple, dans l’exemple BEEPER, la CBeeper2 classe est la classe de déchirure et la CBeeper classe 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

Spécifications

En-tête : atlcom.h

CComTearOffObject ::AddRef

Incrémente le nombre de références de l’objet CComTearOffObject par un.

STDMETHOD_(ULONG, AddRef)();

Valeur de retour

Valeur qui peut être utile pour les diagnostics et les tests.

CComTearOffObject ::CComTearOffObject

Constructeur .

CComTearOffObject(void* pv);

Paramètres

Pv
[in] Pointeur qui sera converti en pointeur vers un CComObject<Owner> objet.

Notes

Incrémente le nombre de références du propriétaire par un.

CComTearOffObject ::~CComTearOffObject

Destructeur.

~CComTearOffObject();

Notes

Libère toutes les ressources allouées, appelle FinalRelease et décrémente le nombre de verrous du module.

CComTearOffObject ::CComTearOffObjectBase

Constructeur .

CComTearOffObjectBase();

Notes

Initialise le membre m_pOwner sur NULL.

CComTearOffObject ::m_pOwner

Pointeur vers un objet CComObject dérivé de Owner.

CComObject<Owner>* m_pOwner;

Paramètres

Propriétaire
[in] Classe pour laquelle une déchirure est implémentée.

Notes

Le pointeur est initialisé sur NULL pendant la construction.

CComTearOffObject ::QueryInterface

Récupère un pointeur vers l'interface demandée.

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

Paramètres

Iid
[in] IID de l’interface demandée.

ppvObject
[out] Pointeur vers le pointeur d’interface identifié par iid ou NULL si l’interface est introuvable.

Valeur de retour

Valeur HRESULT standard.

Notes

Requêtes d’abord pour les interfaces sur votre classe de déchirure. Si l’interface n’est pas là, interroge l’interface sur l’objet propriétaire. Si l’interface demandée est IUnknown, retourne le IUnknown propriétaire.

CComTearOffObject ::Release

Décrémente le nombre de références par un et, si le nombre de références est égal à zéro, supprime le CComTearOffObject.

STDMETHOD_ULONG Release();

Valeur de retour

Dans les builds non debug, retourne toujours zéro. Dans les builds de débogage, retourne une valeur qui peut être utile pour les diagnostics ou les tests.

Voir aussi

CComCachedTearOffObject, classe
Vue d’ensemble de la classe