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 QueryInterface
CComTearOffObject
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.