Classe de CComTearOffObject
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 |
---|---|
Constructeur. |
|
Le destructeur. |
Méthodes publiques
Nom |
Description |
---|---|
Incrémente le décompte de références d'un objet d' CComTearOffObject . |
|
Retourne un pointeur vers l'interface demandée sur votre arrachent la classe ou la classe propriétaire. |
|
Décrémente le décompte de références d'un objet d' CComTearOffObject et le perd. |
Méthodes de CComTearOffObjectBase
Constructeur. |
Membres de données de CComTearOffObjectBase
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
Classe de CComCachedTearOffObject