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.