COM_INTERFACE_ENTRY Makros
Diese Makros geben die Schnittstellen eines Objekts in die COM-Zuordnung ein, sodass darauf zugegriffen QueryInterface
werden kann. Die Reihenfolge der Einträge in der COM-Karte ist die Bestellschnittstellen werden während der Zeit QueryInterface
auf 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_IPersistStorage
die 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_IPersistStorage
die IID .