Templatelt; -Klasse Base >
Klasse CComTearOffObject : öffentliche Base
Parameter
Base
Ihre ABREISS-Klasse, die von CComTearOffObjectBase und Sie Ihre ABREISS-Objekt unterstützen möchten Schnittstellen.
ATL implementiert die Schnittstellen ABREISS in zwei Phasen — die CComTearOffObjectBase Methoden behandeln den Verweiszähler und QueryInterface, während CComTearOffObject implementiert IUnknown.
CComTearOffObject implementiert eine Schnittstelle ABREISS als separates Objekt, das instanziiert wird, nur, wenn diese Schnittstelle abgefragt werden. Tear-off wird gelöscht, wenn der Verweiszähler 0 (null) wird. In der Regel erstellen Sie eine ABREISS-Schnittstelle für eine Schnittstelle, die selten verwendet wird, da mit Tear-off einen Vtable-Zeiger in alle Instanzen des Haupt-Objekts speichert,.
Leiten Sie die Klasse zur Implementierung der ABREISS aus CComTearOffObjectBase und welche Schnittstellen das ABREISS-Objekt unterstützen soll. CComTearOffObjectBase ist auf der Besitzerklasse und die Threadmodell auf Vorlagen beruhen. Die Besitzer-Klasse ist die Klasse des Objekts, für die ein ABREISS umgesetzt wird. Wenn Sie eine Threadmodell nicht angeben, wird das Standard-Thread-Modell verwendet.
Erstellen Sie eine COM-Zuordnung für Ihre ABREISS-Klasse. Wenn ATL den ABREISS instanziiert, erstellt er CComTearOffObjectlt;CYourTearOffClass > oder CComCachedTearOffObject <CYourTearOffClass>.
In das Beispiel für BEEPER, beispielsweise die CBeeper2 -Klasse ist die Klasse ABREISS und die CBeeper Besitzer Klasse:
klasse CBeeper2: öffentliche ISupportErrorInfo,
Nbsp; öffentliche CComTearOffObjectBase <CBeeper>
{
Öffentliche:
{CBeeper2()}
STDMETHOD(InterfaceSupportsErrorInfo) (REFIID Riid)
{
Rückkehr (InlineIsEqualGUID(IID_IBeeper,riid))?
S_OK: S_FALSE;
}
BEGIN_COM_MAP(CBeeper2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
};
Klasse CBeeper:
öffentliche IDispatchImpl < IBeeper, IID_IBeeper & LIBID_BeeperLib >,
öffentliche CComObjectRoot,
öffentliche CComCoClass < CBeeper & CLSID_Beeper >
{
Öffentliche:
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>
Siehe auch&Nbsp;CComCachedTearOffObject