Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Met deze klasse wordt een losloopinterface geïmplementeerd.
Syntaxis
template<class Base>
class CComTearOffObject : public Base
Parameterwaarden
Base
Uw scheurklasse, afgeleid van CComTearOffObjectBase en de interfaces die u wilt ondersteunen door het tear-off-object.
ATL implementeert de losloopinterfaces in twee fasen: de CComTearOffObjectBase methoden verwerken het aantal verwijzingen en QueryInterface, terwijl IUnknown wordt CComTearOffObject geïmplementeerd.
Leden
Openbare constructors
| Naam | Description |
|---|---|
| CComTearOffObject::CComTearOffObject | De constructor. |
| CComTearOffObject::~CComTearOffObject | De destructor. |
Openbare methoden
| Naam | Description |
|---|---|
| CComTearOffObject::AddRef | Hiermee wordt het aantal verwijzingen voor een CComTearOffObject object verhoogd. |
| CComTearOffObject::QueryInterface | Retourneert een aanwijzer naar de aangevraagde interface in uw scheurklasse of de eigenaarklasse. |
| CComTearOffObject::Release | Hiermee wordt het aantal verwijzingen voor een CComTearOffObject object afgebroken en vernietigd. |
CComTearOffObjectBase-methoden
| Functie | Description |
|---|---|
| CComTearOffObjectBase | Bouwer. |
CComTearOffObjectBase-gegevensleden
| Gegevenslid | Description |
|---|---|
| m_pOwner | Een aanwijzer naar een CComObject afgeleide van de eigenaarklasse. |
Opmerkingen
CComTearOffObject implementeert een tear-off-interface als een afzonderlijk object dat alleen wordt geïnstantieerd wanneer deze interface wordt opgevraagd. De scheur wordt verwijderd wanneer het aantal verwijzingen nul wordt. Normaal gesproken bouwt u een losloopinterface voor een interface die zelden wordt gebruikt, omdat u met een scheur een vtable-aanwijzer opslaat in alle exemplaren van uw hoofdobject.
U moet de klasse afleiden die de scheuring implementeert van CComTearOffObjectBase en van de interfaces die u wilt gebruiken voor uw tear-off-object.
CComTearOffObjectBase is templatized op de eigenaarklasse en het threadmodel. De klasse eigenaar is de klasse van het object waarvoor een scheur wordt geïmplementeerd. Als u geen threadmodel opgeeft, wordt het standaardthreadmodel gebruikt.
U moet een COM-kaart maken voor uw scheurklasse. Wanneer ATL de scheur geïnstitueert, wordt deze gemaakt CComTearOffObject<CYourTearOffClass> of CComCachedTearOffObject<CYourTearOffClass>.
In het BEEPER-voorbeeld is de CBeeper2 klasse bijvoorbeeld de scheurklasse en is de CBeeper klasse de eigenaarklasse:
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:
};
Overnamehiërarchie
Base
CComTearOffObject
Requirements
Koptekst: atlcom.h
CComTearOffObject::AddRef
Hiermee wordt het aantal verwijzingen van het CComTearOffObject object met één verhoogd.
STDMETHOD_(ULONG, AddRef)();
Retourwaarde
Een waarde die nuttig kan zijn voor diagnostische gegevens en tests.
CComTearOffObject::CComTearOffObject
De constructor.
CComTearOffObject(void* pv);
Parameterwaarden
Pv
[in] Aanwijzer die wordt geconverteerd naar een aanwijzer naar een CComObject<Owner> object.
Opmerkingen
Hiermee wordt het aantal verwijzingen van de eigenaar met één verhoogd.
CComTearOffObject::~CComTearOffObject
De destructor.
~CComTearOffObject();
Opmerkingen
Hiermee worden alle toegewezen resources vrijgemaakt, FinalRelease aanroepen en wordt het aantal modulevergrendelingen afgetrokken.
CComTearOffObject::CComTearOffObjectBase
De constructor.
CComTearOffObjectBase();
Opmerkingen
Initialiseert het m_pOwner lid in NULL.
CComTearOffObject::m_pOwner
Een aanwijzer naar een CComObject-object dat is afgeleid van Owner.
CComObject<Owner>* m_pOwner;
Parameterwaarden
Owner
[in] De klasse waarvoor een scheur wordt geïmplementeerd.
Opmerkingen
De aanwijzer wordt tijdens de bouw geïnitialiseerd naar NULL.
CComTearOffObject::QueryInterface
Hiermee wordt een aanwijzer naar de aangevraagde interface opgehaald.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
Parameterwaarden
iid
[in] De IID van de interface die wordt aangevraagd.
ppvObject
[uit] Een aanwijzer naar de interfacepointer die is geïdentificeerd door iid of NULL als de interface niet wordt gevonden.
Retourwaarde
Een standaard HRESULT-waarde.
Opmerkingen
Query's eerst voor interfaces in uw klasse scheuren. Als de interface er niet is, voert u query's uit voor de interface op het eigenaarsobject. Als de aangevraagde interface is IUnknown, wordt de IUnknown eigenaar geretourneerd.
CComTearOffObject::Release
Hiermee wordt het aantal verwijzingen met één verminderd en, als het aantal verwijzingen nul is, verwijdert u het CComTearOffObject.
STDMETHOD_ULONG Release();
Retourwaarde
In builds zonder foutopsporing retourneert altijd nul. In builds voor foutopsporing wordt een waarde geretourneerd die nuttig kan zijn voor diagnostische gegevens of tests.