COM_INTERFACE_ENTRY Makros

Diese Makros geben die Schnittstellen eines Objekts in die COM-Zuordnung ein, sodass darauf zugegriffen QueryInterfacewerden kann. Die Reihenfolge der Einträge in der COM-Karte ist die Bestellschnittstellen werden während der Zeit QueryInterfaceauf einen übereinstimmenden IID überprüft.

Makro Beschreibung
COM_INTERFACE_ENTRY Gibt Schnittstellen in die COM-Schnittstellenzuordnung ein.
COM_INTERFACE_ENTRY2 Verwenden Sie dieses Makro, um zwei Vererbungszweige zu unterscheiden.
COM_INTERFACE_ENTRY_IID Verwenden Sie dieses Makro, um die Schnittstelle in die COM-Karte einzugeben und deren IID anzugeben.
COM_INTERFACE_ENTRY2_IID Identisch mit COM_INTERFACE_ENTRY2, es sei denn, Sie können eine andere IID angeben.
COM_INTERFACE_ENTRY_AGGREGATE Wenn die von iid identifizierte Schnittstelle abgefragt wird, COM_INTERFACE_ENTRY_AGGREGATE wird weitergeleitet an punk.
COM_INTERFACE_ENTRY_AGGREGATE_BLIND Identisch mit COM_INTERFACE_ENTRY_AGGREGATE, mit der Ausnahme, dass die Abfrage für jede IID-Abfrage dazu führt, dass die Abfrage an Punk weitergeleitet wird.
COM_INTERFACE_ENTRY_AUTOAGGREGATE Identisch mit COM_INTERFACE_ENTRY_AGGREGATE, außer wenn Punk NULL ist, wird automatisch das von der clsid beschriebene Aggregat erstellt.
COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND Identisch mit COM_INTERFACE_ENTRY_AUTOAGGREGATE, mit der Ausnahme, dass die Abfrage für jede IID-Abfrage dazu führt, dass die Abfrage an Punk weitergeleitet wird, und wenn Punk NULL ist, automatisch das durch die clsid beschriebene Aggregat erstellt wird.
COM_INTERFACE_ENTRY_BREAK Bewirkt, dass das Programm DebugBreak aufruft, wenn die angegebene Schnittstelle abgefragt wird.
COM_INTERFACE_ENTRY_CACHED_TEAR_OFF Speichert die schnittstellenspezifischen Daten für jede Instanz.
COM_INTERFACE_ENTRY_TEAR_OFF Macht Ihre Abreißschnittstellen verfügbar.
COM_INTERFACE_ENTRY_CHAIN Verarbeitet die COM-Zuordnung der Basisklasse, wenn die Verarbeitung diesen Eintrag in der COM-Zuordnung erreicht.
COM_INTERFACE_ENTRY_FUNC Ein allgemeiner Mechanismus für die Verknüpfung mit der ATL-Logik QueryInterface .
COM_INTERFACE_ENTRY_FUNC_BLIND Identisch mit COM_INTERFACE_ENTRY_FUNC, mit der Ausnahme, dass die Abfrage nach einem IID zu einem Aufruf von Func führt.
COM_INTERFACE_ENTRY_NOINTERFACE Gibt E_NOINTERFACE zurück und beendet die COM-Zuordnungsverarbeitung, wenn die angegebene Schnittstelle abgefragt wird.

Anforderungen

Kopfzeile: atlcom.h

COM_INTERFACE_ENTRY

Gibt Schnittstellen in die COM-Schnittstellenzuordnung ein.

Syntax

COM_INTERFACE_ENTRY( x )

Parameter

x
[in] Der Name einer Schnittstelle, von der das Klassenobjekt direkt abgeleitet ist.

Hinweise

In der Regel ist dies der Eintragstyp, den Sie am häufigsten verwenden.

Beispiel

BEGIN_COM_MAP(CThisExample)
   COM_INTERFACE_ENTRY(IThisExample)
   COM_INTERFACE_ENTRY(IDispatch)
   COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()

Anforderungen

Kopfzeile: atlcom.h

COM_INTERFACE_ENTRY2

Verwenden Sie dieses Makro, um zwei Vererbungszweige zu unterscheiden.

COM_INTERFACE_ENTRY2(x, x2)

Parameter

x
[in] Der Name einer Schnittstelle, die Sie aus Dem Objekt verfügbar machen möchten.

x2
[in] Der Name der Vererbungsverzweigung, aus der x verfügbar gemacht wird.

Hinweise

Wenn Sie z. B. das Klassenobjekt von zwei dualen Schnittstellen ableiten, können Sie COM_INTERFACE_ENTRY2 verfügbar machen IDispatch , da IDispatch sie von einer der Schnittstellen abgerufen werden können.

Beispiel

class ATL_NO_VTABLE CEntry2Example :
   public CEntry2ExampleBase, // CEntry2ExampleBase derives from IDispatch
   public IDispatchImpl<IEntry2Example, &IID_IEntry2Example, &LIBID_NVC_ATL_WindowingLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
   public CComCoClass<CEntry2Example, &CLSID_Entry2Example>
{
public:
   CEntry2Example()
   {
   }

BEGIN_COM_MAP(CEntry2Example)
   COM_INTERFACE_ENTRY(IEntry2Example)
   COM_INTERFACE_ENTRY2(IDispatch, IEntry2Example)
END_COM_MAP()
};

COM_INTERFACE_ENTRY_IID

Verwenden Sie dieses Makro, um die Schnittstelle in die COM-Karte einzugeben und deren IID anzugeben.

COM_INTERFACE_ENTRY_IID(iid, x)

Parameter

iid
[in] Die GUID der verfügbar gemachten Schnittstelle.

x
[in] Der Name der Klasse, deren vtable als durch iid identifizierte Schnittstelle verfügbar gemacht wird.

Beispiel

BEGIN_COM_MAP(CExample)
   COM_INTERFACE_ENTRY(IExample)
   COM_INTERFACE_ENTRY_IID(IID_IDispatch, CExampleDispatch)
   COM_INTERFACE_ENTRY(IExampleBase)
   COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()

COM_INTERFACE_ENTRY2_IID

Identisch mit COM_INTERFACE_ENTRY2, es sei denn, Sie können eine andere IID angeben.

COM_INTERFACE_ENTRY2_IID(iid, x, x2)

Parameter

iid
[in] Die GUID, die Sie für die Schnittstelle angeben.

x
[in] Der Name einer Schnittstelle, von der das Klassenobjekt direkt abgeleitet ist.

x2
[in] Der Name einer zweiten Schnittstelle, von der das Klassenobjekt direkt abgeleitet wird.

COM_INTERFACE_ENTRY_AGGREGATE

Wenn die von iid identifizierte Schnittstelle abgefragt wird, wird COM_INTERFACE_ENTRY_AGGREGATE an Punk weitergeleitet.

COM_INTERFACE_ENTRY_AGGREGATE(iid, punk)

Parameter

iid
[in] Die GUID der abgefragten Schnittstelle.

Punk
[in] Der Name eines IUnknown Zeigers.

Hinweise

Der Punk-Parameter wird angenommen, um auf das innere Unbekannte eines Aggregats oder auf NULL zu zeigen, in diesem Fall wird der Eintrag ignoriert. Normalerweise würden CoCreate Sie das Aggregat in FinalConstruct.

Beispiel

BEGIN_COM_MAP(COuter1)
   COM_INTERFACE_ENTRY_AGGREGATE(__uuidof(IAgg), m_punkAgg)
END_COM_MAP()

COM_INTERFACE_ENTRY_AGGREGATE_BLIND

Identisch mit COM_INTERFACE_ENTRY_AGGREGATE, mit der Ausnahme, dass die Abfrage für jede IID-Abfrage dazu führt, dass die Abfrage an Punk weitergeleitet wird.

COM_INTERFACE_ENTRY_AGGREGATE_BLIND(punk)

Parameter

Punk
[in] Der Name eines IUnknown Zeigers.

Hinweise

Wenn die Schnittstellenabfrage fehlschlägt, wird die Verarbeitung der COM-Zuordnung fortgesetzt.

Beispiel

BEGIN_COM_MAP(COuter2)
   COM_INTERFACE_ENTRY_AGGREGATE_BLIND(m_punkAggBlind)
END_COM_MAP()

COM_INTERFACE_ENTRY_AUTOAGGREGATE

Identisch mit COM_INTERFACE_ENTRY_AGGREGATE, außer wenn Punk NULL ist, wird automatisch das von der clsid beschriebene Aggregat erstellt.

COM_INTERFACE_ENTRY_AUTOAGGREGATE(iid, punk, clsid)

Parameter

iid
[in] Die GUID der abgefragten Schnittstelle.

Punk
[in] Der Name eines IUnknown Zeigers. Muss ein Mitglied der Klasse sein, die die COM-Zuordnung enthält.

clsid
[in] Der Bezeichner des Aggregats, das erstellt wird, wenn Punk NULL ist.

Hinweise

Beispiel

BEGIN_COM_MAP(COuter3)
   COM_INTERFACE_ENTRY_AUTOAGGREGATE(__uuidof(IAutoAgg), m_punkAutoAgg, CLSID_CAutoAgg)
END_COM_MAP()

COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND

Identisch mit COM_INTERFACE_ENTRY_AUTOAGGREGATE, mit der Ausnahme, dass die Abfrage für jede IID-Abfrage dazu führt, dass die Abfrage an Punk weitergeleitet wird, und wenn Punk NULL ist, automatisch das durch die clsid beschriebene Aggregat erstellt wird.

COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND(punk, clsid)

Parameter

Punk
[in] Der Name eines IUnknown Zeigers. Muss ein Mitglied der Klasse sein, die die COM-Zuordnung enthält.

clsid
[in] Der Bezeichner des Aggregats, das erstellt wird, wenn Punk NULL ist.

Hinweise

Wenn die Schnittstellenabfrage fehlschlägt, wird die Verarbeitung der COM-Zuordnung fortgesetzt.

Beispiel

BEGIN_COM_MAP(COuter4)
   COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND(m_punkAutoAggB, CLSID_CAutoAggB)
END_COM_MAP()

COM_INTERFACE_ENTRY_BREAK

Bewirkt, dass das Programm DebugBreak aufruft, wenn die angegebene Schnittstelle abgefragt wird.

COM_INTERFACE_ENTRY_BREAK(x)

Parameter

x
[in] Text, der zum Erstellen des Schnittstellenbezeichners verwendet wird.

Hinweise

Die Schnittstelle IID wird durch Anfügen von x an IID_. Wenn z. B. x ist IPersistStorage, lautet IID_IPersistStoragedie IID .

COM_INTERFACE_ENTRY_CACHED_TEAR_OFF

Speichert die schnittstellenspezifischen Daten für jede Instanz.

COM_INTERFACE_ENTRY_CACHED_TEAR_OFF(iid, x, punk)

Parameter

iid
[in] Die GUID der Abrissschnittstelle.

x
[in] Der Name der Klasse, die die Schnittstelle implementiert.

Punk
[in] Der Name eines IUnknown Zeigers. Muss ein Mitglied der Klasse sein, die die COM-Zuordnung enthält. Sollte im Konstruktor des Klassenobjekts in NULL initialisiert werden.

Hinweise

Wenn die Schnittstelle nicht verwendet wird, verringert dies die Gesamtinstanzgröße des Objekts.

Beispiel

BEGIN_COM_MAP(COuter)
   COM_INTERFACE_ENTRY(IOuter)
   COM_INTERFACE_ENTRY_CACHED_TEAR_OFF(IID_ITearOff, CTearOff, punkTearOff)
END_COM_MAP()

COM_INTERFACE_ENTRY_TEAR_OFF

Macht Ihre Abreißschnittstellen verfügbar.

COM_INTERFACE_ENTRY_TEAR_OFF(iid, x)

Parameter

iid
[in] Die GUID der Abrissschnittstelle.

x
[in] Der Name der Klasse, die die Schnittstelle implementiert.

Hinweise

Eine Abrissschnittstelle wird als separates Objekt implementiert, das jedes Mal instanziiert wird, wenn die von ihm dargestellte Schnittstelle abgefragt wird. In der Regel erstellen Sie die Schnittstelle als Abriss, wenn die Schnittstelle selten verwendet wird, da dadurch ein vtable-Zeiger in jeder Instanz des Hauptobjekts gespeichert wird. Der Abriss wird gelöscht, wenn die Bezugsanzahl null wird. Die Klasse, die den Abriss implementiert, sollte von CComTearOffObjectBase einer eigenen COM-Karte abgeleitet werden.

Beispiel

BEGIN_COM_MAP(CBeeper)
   COM_INTERFACE_ENTRY(IBeeper)
   COM_INTERFACE_ENTRY(IDispatch)
   COM_INTERFACE_ENTRY_TEAR_OFF(IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()

COM_INTERFACE_ENTRY_CHAIN

Verarbeitet die COM-Zuordnung der Basisklasse, wenn die Verarbeitung diesen Eintrag in der COM-Zuordnung erreicht.

COM_INTERFACE_ENTRY_CHAIN(classname)

Parameter

classname
[in] Eine Basisklasse des aktuellen Objekts.

Hinweise

Beispiel: Im folgenden Code:

BEGIN_COM_MAP(COuterObject)
   COM_INTERFACE_ENTRY2(IDispatch, IOuterObject)
   COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()

Beachten Sie, dass der erste Eintrag in der COM-Zuordnung eine Schnittstelle für das Objekt sein muss, das die COM-Zuordnung enthält. Daher können Sie ihre COM-Karteneinträge nicht mit COM_INTERFACE_ENTRY_CHAIN beginnen, wodurch die COM-Zuordnung eines anderen Objekts an dem Punkt durchsucht wird, an dem COM_INTERFACE_ENTRY_CHAIN(COtherObject) in der COM-Karte Ihres Objekts angezeigt wird. Wenn Sie zuerst die COM-Zuordnung eines anderen Objekts durchsuchen möchten, fügen Sie ihrer COM-Karte einen Schnittstelleneintrag hinzu IUnknown , und verketten Sie dann die COM-Zuordnung des anderen Objekts. Zum Beispiel:

BEGIN_COM_MAP(CThisObject)
   COM_INTERFACE_ENTRY(IUnknown)
   COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()

COM_INTERFACE_ENTRY_FUNC

Ein allgemeiner Mechanismus für die Verknüpfung mit der ATL-Logik QueryInterface .

COM_INTERFACE_ENTRY_FUNC(iid, dw, func)

Parameter

iid
[in] Die GUID der verfügbar gemachten Schnittstelle.

dw
[in] Ein Parameter, der an den Func übergeben wird.

func
[in] Der Funktionszeiger, der iid zurückgibt.

Hinweise

Wenn iid mit der IID der abgefragten Schnittstelle übereinstimmt, wird die durch Func angegebene Funktion aufgerufen. Die Deklaration für die Funktion sollte folgendes sein:

HRESULT WINAPI func(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw);

Wenn Die Funktion aufgerufen wird, pv verweist sie auf ihr Klassenobjekt. Der Riid-Parameter bezieht sich auf die Schnittstelle, die abgefragt wird, ppv ist der Zeiger auf die Position, an der die Funktion den Zeiger auf die Schnittstelle speichern soll, und dw ist der Parameter, den Sie im Eintrag angegeben haben. Die Funktion sollte * ppv auf NULL festlegen und E_NOINTERFACE oder S_FALSE zurückgeben, wenn keine Schnittstelle zurückgegeben werden soll. Mit E_NOINTERFACE wird die COM-Zuordnungsverarbeitung beendet. Bei S_FALSE wird die COM-Zuordnungsverarbeitung fortgesetzt, obwohl kein Schnittstellenzeiger zurückgegeben wurde. Wenn die Funktion einen Schnittstellenzeiger zurückgibt, sollte sie S_OK zurückgeben.

COM_INTERFACE_ENTRY_FUNC_BLIND

Identisch mit COM_INTERFACE_ENTRY_FUNC, mit der Ausnahme, dass die Abfrage nach einem IID zu einem Aufruf von Func führt.

COM_INTERFACE_ENTRY_FUNC_BLIND(dw, func)

Parameter

dw
[in] Ein Parameter, der an den Func übergeben wird.

func
[in] Die Funktion, die aufgerufen wird, wenn dieser Eintrag in der COM-Zuordnung verarbeitet wird.

Hinweise

Fehler führen dazu, dass die Verarbeitung auf der COM-Karte fortgesetzt wird. Wenn die Funktion einen Schnittstellenzeiger zurückgibt, sollte sie S_OK zurückgeben.

COM_INTERFACE_ENTRY_NOINTERFACE

Gibt E_NOINTERFACE zurück und beendet die COM-Zuordnungsverarbeitung, wenn die angegebene Schnittstelle abgefragt wird.

COM_INTERFACE_ENTRY_NOINTERFACE(x)

Parameter

x
[in] Text, der zum Erstellen des Schnittstellenbezeichners verwendet wird.

Hinweise

Sie können dieses Makro verwenden, um zu verhindern, dass eine Schnittstelle in einem bestimmten Fall verwendet wird. Sie können dieses Makro beispielsweise direkt vor COM_INTERFACE_ENTRY_AGGREGATE_BLIND in Ihre COM-Zuordnung einfügen, um zu verhindern, dass eine Abfrage für die Schnittstelle an das innere Unbekannte des Aggregats weitergeleitet wird.

Die Schnittstelle IID wird durch Anfügen von x an IID_. Wenn z. B. x ist IPersistStorage, lautet IID_IPersistStoragedie IID .