templatelt, classe Base >
classe CComTearOffObject : public Base
Paramètres
Base
Votre classe détachables, dérivé de CComTearOffObjectBase et les interfaces que vous souhaitez que votre objet détachable à l'appui.
ATL implémente les interfaces détachables en deux phases : les méthodes de CComTearOffObjectBase gérer le décompte de références et QueryInterface, tandis que CComTearOffObject implémente IUnknown.
CComTearOffObject implémente une interface tear-off comme un objet distinct qui est instancié uniquement lorsque cette interface est interrogée pour. L'arrachage est supprimé lorsque son décompte devient nulle. En général, vous générez une interface détachables pour une interface qui est rarement utilisée, car à l'aide d'un volant enregistre un pointeur vtable dans toutes les instances de votre objet principal.
Vous devez dériver de la classe implémentant le tear-off de CComTearOffObjectBase et de quel interfaces vous souhaitez que votre objet détachable à l'appui. CComTearOffObjectBase est mis en modèle sur le modèle de thread et de la classe propriétaire. La classe propriétaire est la classe de l'objet pour lequel un détachable est mis en œuvre. 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 une carte de COM pour votre classe de tear-off. Lorsque ATL instancie le tear-off, il créera des CComTearOffObjectlt ;CYourTearOffClass > ou CComCachedTearOffObject <CYourTearOffClass>.
Par exemple, dans l'exemple BEEPER, la CBeeper2 classe est la classe tear-off et la CBeeper classe est la classe propriétaire:
class CBeeper2 : public ISupportErrorInfo,
nbsp ; CComTearOffObjectBase public <CBeeper>
{
public :
CBeeper2() {}
STDMETHOD(InterfaceSupportsErrorInfo) (REFIID riid)
{
retour (InlineIsEqualGUID(IID_IBeeper,riid)) ?
S_OK : S_FALSE ;
}
BEGIN_COM_MAP(CBeeper2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
};
classe CBeeper :
public IDispatchImpl < IBeeper, & IID_IBeeper, & LIBID_BeeperLib >,
CComObjectRoot public,
public CComCoClass < CBeeper & CLSID_Beeper >
{
public :
CBeeper() ;
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY_TEAR_OFF (IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()
...
}
# include lt;atlcom.h>
Voir aussi  ;CComCachedTearOffObject