Objektattribut
Das [ ] Objektschnittstellenattribut identifiziert eine COM-Schnittstelle. (Eine Schnittstellenattributliste, die das [ ] Objektattribut nicht enthält, gibt eine DCE-RPC-Schnittstelle an.)
[
object,
uuid(string-uuid)
[ , interface-attribute-list]
]
interface interface-name : base-interface
{
...
}
Parameter
-
string-uuid
-
Eine vom Uuidgen-Hilfsprogramm generierte UUID-Zeichenfolge. Sie können die UUID-Zeichenfolge in Anführungszeichen umschließen.
-
interface-attribute-list
-
Andere Attribute, die für die Schnittstelle als Ganzes gelten.
-
Schnittstellenname
-
Der Name der Schnittstelle.
-
Basisschnittstelle
-
Die COM-Schnittstelle, von der diese Schnittstelle ableitung. Die Basisschnittstelle muss IUnknown, IDispatchoder eine andere COM-Schnittstelle sein, die entweder direkt oder indirekt von IUnknown oder IDispatch abstammt.
Bemerkungen
Eine Schnittstellenattributliste für eine COM-Schnittstelle muss das [ uuid-Attribut ] enthalten, darf jedoch nicht das [ Versionsattribut ] enthalten.
Standardmäßig werden beim Kompilieren einer COM-Schnittstelle mit dem MIDL-Compiler die Dateien generiert, die zum Erstellen einer Proxy-DLL erforderlich sind. Diese DLL enthält den Code zur Unterstützung der Verwendung der benutzerdefinierten COM-Schnittstelle durch Clientanwendungen und Objektserver. Wenn die Schnittstellenattributliste für eine COM-Schnittstelle jedoch das lokale Attribut angibt, generiert der [ ] MIDL-Compiler nur die Schnittstellenheaderdatei.
Der MIDL-Compiler generiert automatisch einen Schnittstellendatentyp für eine COM-Schnittstelle. Alternativ können Sie typedef mit dem Schlüsselwort interface verwenden, um explizit einen Schnittstellendatentyp zu definieren. Die Schnittstellenspezifikation kann dann den Schnittstellendatentyp in Funktionsparametern und Rückgabewerten, Struktur- und Union-Membern und anderen Typdeklarationen verwenden. Das folgende Beispiel veranschaulicht die Verwendung eines automatisch generierten IStream-Datentyps:
[
object,
uuid (ABCDEFOO-1234-1234-5678-ABCDEF123456)
]
interface IStream : IUnknown
{
typedef IStream * LPSTREAM;
// Other interface definition statements.
}
In einer COM-Schnittstelle werden alle Schnittstellen-Memberfunktionen als virtuelle Funktionen angenommen. Eine virtuelle Funktion verfügt über einen impliziten this-Zeiger als ersten Parameter. Die Virtuelle Funktionstabelle enthält einen Eintrag für jede Schnittstellen-Memberfunktion.
Memberfunktionen [ der nicht ] lokalen Objektschnittstelle müssen über den Rückgabewert HRESULT oder SCODE verfügen. (Beachten Sie, dass frühere Versionen von MIDL memberfunktionen das Zurückgeben von void ermöglicht haben. Ab MIDL Version 3.0 generiert die Rückgabe von void jedoch einen Compilerfehler.) Der Rückgabewert HRESULT oder SCODE bedeutet, dass die generierten Proxys die Ausnahme abfangen und den Ausnahmecode im Rückgabewert zurückgeben, wenn während eines Remoteaufrufs eine Ausnahme generiert wird. Wenn Ihre Anwendung Fehler ignorieren kann, die während eines Remoteprozeduraufrufs auftreten, können Sie HRESULT als Rückgabetyp angeben, ohne den Rückgabewert nach dem Aufruf zu überprüfen.
Wenn Sie eine alte Anwendung neu kompilieren, kann das Ändern der Rückgabetypen zu Abwärtskompatibilitätsproblemen führen, wenn der Server das neu eingeführte Ergebnis an den Client sendet. Als Alternative zum Ändern des Rückgabetyps können Sie die Funktion, die void zurückgibt, mit dem Aufruf als Attribut bezeichnen, wodurch sie zu einer lokalen [ _ ] Funktion wird. Definieren Sie dann eine zugehörige Remotefunktion mit den gleichen Parametern, aber mit dem Rückgabetyp HRESULT. Die lokale Funktion kann bei Bedarf eine Ausnahme basierend auf diesem HRESULT-Wert auslösen.
Das [ ] Objektattribut ist nicht verfügbar, wenn Sie mit dem MIDL-Compilerschalter /osf kompilieren.
Beispiele
[
uuid(12345678-1234-1234-1234-123456789ABC),
object
]
interface IMyInterface : IUnknown
{
// Interface definition statements.
}
[
uuid(87654321-1234-1234-1234-123456789ABC),
object,
local
]
interface ILocalInterface : ISomeOldCOMInterface
{
// Interface definition statements.
}