Share via


dispinterface-Attribut

Die dispinterface-Anweisung definiert eine Reihe von Eigenschaften und Methoden, für die Sie IDispatch::Invoke aufrufen können. Ein Dispinterface kann durch explizites Auflisten der unterstützten Methoden und Eigenschaften (Syntax 1) oder durch Auflisten einer einzelnen Schnittstelle (Syntax 2) definiert werden.

[
    [attributes]
]
dispinterface dispinterface-name
{
    properties:
        property-list
    methods:
        method-list
};

[
  [attributes]
]
dispinterface dispinterface-name
{
    interface interface-name
};

Parameter

attributes

Gibt Attribute an, die für das gesamte Dispinterface gelten. Die folgenden Attribute werden akzeptiert: [helpstring], [helpcontext], [helpfile], [hidden], [nonextensible], [oleautomation], [restricted], [uuid] und [version].

dispinterface-name

Der Name, unter dem das Dispinterface in der Typbibliothek bekannt ist. Dieser Name muss innerhalb der Typbibliothek eindeutig sein.

property-list

(Syntax 1) Eine optionale Liste der vom Objekt unterstützten Eigenschaften, die in Form von Variablen deklariert werden. Dies ist die Kurzform zum Deklarieren der Eigenschaftenfunktionen in der Methodenliste. Weitere Informationen finden Sie im Abschnitt "Kommentare".

method-list

(Syntax 1) Eine Liste, die einen Funktionsprototyp für jede Methode und Eigenschaft in der Dispinterface enthält. Eine beliebige Anzahl von Funktionsdefinitionen kann in der Methlist angezeigt werden. Eine Funktion in methlist hat die folgende Form:

[Attribute]returntype methname type paramname(params);

Die folgenden Attribute werden für eine Methode in einem Dispinterface akzeptiert: [helpstring], [helpcontext], [propget], [propput], [propputref], [string] und [vararg]. Wenn [vararg] angegeben wird, muss der letzte Parameter ein sicheres Array vom Typ VARIANT sein.

Die Parameterliste ist eine durch Trennzeichen getrennte Liste, von der jedes Element die folgende Form hat:

[Attribute]

Der Typ kann ein beliebiger deklarierter oder integrierter Typ oder ein Zeiger auf einen beliebigen Typ sein. Attribute für Parameter sind:

[in], [out], [optional], [Zeichenfolge]

Schnittstellenname

(Syntax 2) Der Name der Schnittstelle, die als IDispatch-Schnittstelle deklariert werden soll.

Bemerkungen

Der MIDL-Compiler akzeptiert die folgende Parameterreihenfolge (von links nach rechts):

  1. Erforderliche Parameter (Parameter, die nicht über die Attribute [defaultvalue] oder [optional] verfügen),
  2. optionale Parameter mit oder ohne das [defaultvalue]-Attribut,
  3. Parameter mit dem Attribut [optional] und ohne das Attribut [defaultvalue]
  4. [ lcid]-Parameter, falls vorhanden,
  5. Parameter [ retval]

Methodenfunktionen werden genau wie auf der Referenzseite für das Modul beschrieben angegeben, mit der Ausnahme, dass das Attribut [ entry] nicht zulässig ist. Beachten Sie, dass STDOLE32. TLB (STDOLE. TLB auf 16-Bit-Systemen) muss importiert werden, da ein Dispinterface von IDispatch erbt.

Sie können Eigenschaften entweder in den Eigenschaften- oder Methodenlisten deklarieren. Das Deklarieren von Eigenschaften in der Eigenschaftenliste gibt nicht den Typ des Zugriffs an, den die Eigenschaft unterstützt (also get, put oder putref). Geben Sie das Attribut [ readonly] für Eigenschaften an, die put oder putref nicht unterstützen. Wenn Sie die Eigenschaftenfunktionen in der Methodenliste deklarieren, weisen Alle Funktionen für eine Eigenschaft denselben Bezeichner auf.

Bei Verwendung der ersten Syntax sind die Eigenschaften: und Methoden: Tags erforderlich. Das Attribut [ id] ist auch für jedes Element erforderlich. Beispiel:

properties: 
    [id(0)] int Value;    // Default property. 
methods: 
    [id(1)] HRESULT Show();

Im Gegensatz zu Schnittstellenmembern können dispinterface-Member das retval-Attribut nicht verwenden, um einen Wert zusätzlich zu einem HRESULT-Fehlercode zurückzugeben. Das Attribut [ lcid] ist ebenfalls ungültig für dispinterfaces, da IDispatch::Invoke eine LCID übergibt. Es ist jedoch möglich, eine Schnittstelle, die diese Attribute verwendet, neu zu definieren.

Mit der zweiten Syntax können Schnittstellen, die IDispatch unterstützen und zuvor in einem ODL-Skript deklariert werden, wie folgt als IDispatch-Schnittstellen deklariert werden:

dispinterface helloPro 
{ 
    interface hello; 
};

Im vorherigen Beispiel werden alle Member von hello und alle Member deklariert, die hello als unterstützenden IDispatch erbt. In diesem Fall würde MkTypLib, wenn hello zuvor mit [lcid] und [retval]-Membern deklariert wurden, die HRESULTs zurückgegeben haben, jeden [lcid]-Parameter und HRESULT-Rückgabetyp entfernen und stattdessen den Rückgabetyp als den [retval]-Parameter markieren.

Hinweis

Das Mktyplib.exe-Tool ist veraltet. Verwenden Sie stattdessen den MIDL-Compiler.

 

Die Eigenschaften und Methoden eines Dispinterfaces sind nicht Teil der VTBL des Dispinterface. Daher können CreateStdDispatch und DispInvoke nicht zum Implementieren von IDispatch::Invoke verwendet werden. Das Dispinterface wird verwendet, wenn eine Anwendung vorhandene Nicht-VTBL-Funktionen über Automation verfügbar machen muss. Diese Anwendungen können IDispatch::Invoke implementieren, indem sie den Parameter dispidMember untersuchen und die entsprechende Funktion direkt aufrufen.

Beispiele

[ 
    uuid(1e196b20-1f3c-1069-996b-00dd010fe676), 
    version(1.0), 
    helpstring("Useful help string."), 
    helpcontext(2480)
] 
dispinterface MyDispatchObject 
{ 
    properties: 
        [id(1)] int x;    //An integer property named x 
        [id(2)] BSTR y;   //A string property named y 
    methods: 
        [id(3)] HRESULT show();    //No arguments, no result 
        [id(11)] int computeit(int inarg, double *outarg); 
}; 
 
[
    uuid(1e123456-1f3c-1069-996b-00dd010fe676)
] 
dispinterface MyObject 
{ 
    properties: 
    methods: 
        [id(1), propget, bindable, defaultbind, displaybind] long x(); 
 
        [id(1), propput, bindable, defaultbind, 
         displaybind] HRESULT x(long rhs); 
}

Weitere Informationen

bindable

defaultbind

displaybind

helpcontext

helpfile

helpstring

Versteckte

In

Schnittstelle

TYPEFLAGS

ODL-Dateisyntax

ODL-Dateibeispiel

Generieren einer Typbibliothek mit MIDL

Optional

out

nonextensible

propget

propput

propputref

oleautomation

Beschränkt

Schnur

UUID

vararg

Version