Freigeben über


CComTearOffObject-Klasse

Diese Klasse implementiert eine Abrissschnittstelle.

Syntax

template<class Base>
class CComTearOffObject : public Base

Parameter

Bemessungsgrundlage
Ihre abreißende Klasse, abgeleitet von CComTearOffObjectBase und die Schnittstellen, die Sie unterstützen möchten, dass Ihr Tear-off-Objekt unterstützt wird.

ATL implementiert seine Abreißschnittstellen in zwei Phasen – die CComTearOffObjectBase Methoden behandeln die Referenzanzahl und QueryInterfaceCComTearOffObject implementiert IUnknown.

Member

Öffentliche Konstruktoren

Name Beschreibung
CComTearOffObject::CComTearOffObject Der Konstruktor.
CComTearOffObject::~CComTearOffObject Der Destruktor.

Öffentliche Methoden

Name Beschreibung
CComTearOffObject::AddRef Erhöht die Referenzanzahl für ein CComTearOffObject Objekt.
CComTearOffObject::QueryInterface Gibt einen Zeiger auf die angeforderte Schnittstelle in Ihrer Abreißklasse oder der Besitzerklasse zurück.
CComTearOffObject::Release Erhöht die Referenzanzahl für ein CComTearOffObject Objekt und zerstört sie.

CComTearOffObjectBase-Methoden

Funktion Beschreibung
CComTearOffObjectBase Konstruktor.

CComTearOffObjectBase Data-Elemente

Datenmememm Beschreibung
m_pOwner Ein Zeiger auf einen CComObject von der Besitzerklasse abgeleiteten Zeiger.

Hinweise

CComTearOffObject implementiert eine Abrissschnittstelle als separates Objekt, das nur instanziiert wird, wenn diese Schnittstelle abgefragt wird. Der Abriss wird gelöscht, wenn die Bezugsanzahl null wird. In der Regel erstellen Sie eine Abrissschnittstelle für eine Schnittstelle, die selten verwendet wird, da durch die Verwendung eines Abrisses ein vtable-Zeiger in allen Instanzen des Hauptobjekts gespeichert wird.

Sie sollten die Klasse ableiten, die den Abriss von CComTearOffObjectBase und von den Schnittstellen ableiten soll, die Ihr Tear-off-Objekt unterstützen soll. CComTearOffObjectBase wird für die Besitzerklasse und das Threadmodell templatiert. Die Besitzerklasse ist die Klasse des Objekts, für das ein Abreißen implementiert wird. Wenn Sie kein Threadmodell angeben, wird das Standardthreadmodell verwendet.

Sie sollten eine COM-Karte für Ihre Abrissklasse erstellen. Wenn ATL den Abriss instanziiert, wird es erzeugt CComTearOffObject<CYourTearOffClass> oder CComCachedTearOffObject<CYourTearOffClass>.

Im BEEPER-Beispiel ist die Klasse beispielsweise die CBeeper2 Abrissklasse, und die Klasse ist die CBeeper Besitzerklasse:

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:

};

Vererbungshierarchie

Base

CComTearOffObject

Anforderungen

Kopfzeile: atlcom.h

CComTearOffObject::AddRef

Erhöht die Referenzanzahl des CComTearOffObject Objekts um eins.

STDMETHOD_(ULONG, AddRef)();

Rückgabewert

Ein Wert, der für Diagnose und Tests nützlich sein kann.

CComTearOffObject::CComTearOffObject

Der Konstruktor.

CComTearOffObject(void* pv);

Parameter

Pv
[in] Zeiger, der in einen Zeiger in ein CComObject<Owner> Objekt konvertiert wird.

Hinweise

Erhöht die Referenzanzahl des Besitzers um eine.

CComTearOffObject::~CComTearOffObject

Der Destruktor.

~CComTearOffObject();

Hinweise

Gibt alle zugeordneten Ressourcen frei, ruft FinalRelease auf und erhöht die Modulsperranzahl.

CComTearOffObject::CComTearOffObjectBase

Der Konstruktor.

CComTearOffObjectBase();

Hinweise

Initialisiert das m_pOwner-Element auf NULL.

CComTearOffObject::m_pOwner

Ein Zeiger auf ein vom Besitzer abgeleitetes CComObject-Objekt.

CComObject<Owner>* m_pOwner;

Parameter

Besitzer
[in] Die Klasse, für die ein Abreißen implementiert wird.

Hinweise

Der Zeiger wird während der Konstruktion auf NULL initialisiert.

CComTearOffObject::QueryInterface

Ruft einen Zeiger auf die angeforderte Schnittstelle ab.

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);

Parameter

iid
[in] Die IID der angeforderten Schnittstelle.

ppvObject
[out] Ein Zeiger auf den von iid identifizierten Schnittstellenzeiger oder NULL, wenn die Schnittstelle nicht gefunden wird.

Rückgabewert

Ein HRESULT-Standardwert.

Hinweise

Fragt zuerst nach Schnittstellen für Ihre Abrissklasse ab. Wenn die Schnittstelle nicht vorhanden ist, werden Abfragen für die Schnittstelle im Besitzerobjekt ausgeführt. Wenn die angeforderte Schnittstelle lautet IUnknown, wird der IUnknown Besitzer zurückgegeben.

CComTearOffObject::Release

Dekrementiert die Bezugsanzahl um eins und löscht, wenn die Bezugsanzahl null ist, die CComTearOffObject.

STDMETHOD_ULONG Release();

Rückgabewert

Gibt in Nicht-Debugbuilds immer Null zurück. Gibt in Debugbuilds einen Wert zurück, der für Diagnosen oder Tests nützlich sein kann.

Siehe auch

CComCachedTearOffObject-Klasse
Klassenübersicht