Share via


Klasse CComTearOffObject

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.

Zie ook

Klasse CComCachedTearOffObject
Overzicht van klassen