dual-Attribut
Das Dual-Attribut identifiziert eine Schnittstelle, die Eigenschaften und Methoden über IDispatch und direkt über die VTBL verfügbar macht.
[
uuid(uuid-number),
oleautomation,
dual
[ , optional-attribute-list]
]
interface interface-name
{
. . .
};
Parameter
-
uuid-Zahl
-
Gibt eine universell eindeutige Identifikationsnummer für die Schnittstelle an.
-
optional-attribute-list
-
Gibt eine Liste mit null oder mehr zusätzlichen MIDL-Attributen an.
-
Schnittstellenname
-
Der Name der Schnittstelle, auf die das duale Attribut angewendet wird.
Bemerkungen
Schnittstellen, die durch das Dual-Attribut identifiziert werden, müssen mit Automation kompatibel sein und von IDispatch abgeleitet werden. Dieses Attribut ist für Dispinterfaces nicht zulässig.
Das duale Attribut erstellt eine Schnittstelle, die sowohl eine IDispatch-Schnittstelle als auch eine COM-Schnittstelle (Component Object Model) ist. Die ersten sieben Einträge der VTBL für eine duale Schnittstelle sind die sieben Mitglieder von IDispatch, und die restlichen Einträge dienen dem direkten Zugriff auf Elemente der dualen Schnittstelle. Alle Parameter und Rückgabetypen, die für Member einer dualen Schnittstelle angegeben sind, müssen Automation-kompatible Typen sein.
Alle Member einer dualen Schnittstelle müssen ein HRESULT als Funktionsrückgabewert übergeben. Member, z. B. Eigenschaftenzugriffsfunktionen, die andere Werte zurückgeben müssen, sollten den letzten Parameter als out ( retval) angeben, um einen Ausgabeparameter anzugeben, der den Wert der Funktion zurückgibt. Darüber hinaus sollten Member, die mehrere Gebietsschemas unterstützen müssen, einen lcid-Parameter übergeben.
Eine duale Schnittstelle bietet sowohl die Geschwindigkeit der direkten VTBL-Bindung als auch die Flexibilität der IDispatch-Bindung . Aus diesem Grund werden nach Möglichkeit duale Schnittstellen empfohlen.
Hinweis
Wenn Ihre Anwendung auf Objektdaten zugreift, indem Sie diesen Zeiger innerhalb des Schnittstellenaufrufs umwandeln, sollten Sie die VTBL-Zeiger im Objekt anhand Ihrer eigenen VTBL-Zeiger überprüfen, um sicherzustellen, dass Sie mit dem entsprechenden Proxy verbunden sind.
Das Angeben von dual für eine Schnittstelle impliziert, dass die Schnittstelle mit Automation kompatibel ist und daher sowohl das TYPEFLAG_FDUAL- als auch TYPEFLAG_FOLEAUTOMATION-Flags festgelegt wird.
Flags
TYPEFLAG_FDUAL, TYPEFLAG_FOLEAUTOMATION
Beispiele
[
uuid(1e196b20-1f3c-1069-996b-00dd010fe676),
oleautomation, dual
]
interface IHello : IDispatch
{
//Diverse properties and methods defined here.
};
Weitere Informationen