Array- Sized-Pointer Attribute
MIDL bietet einen großen Satz von Features zum Übergeben von Datenarrays und Zeigern auf Daten. Sie können diese Attribute verwenden, um Merkmale von Arrays und mehreren Ebenen von Zeigern anzugeben.
| attribute | Verwendung |
|---|---|
| size _ ist | Gibt die Menge an Arbeitsspeicher an, die für Zeiger mit großer Größe, Zeiger mit Größe auf Zeiger mit großer Größe und ein- oder mehrdimensionale Arrays zugeordnet werden soll. |
| max _ is | Der Höchstwert für einen Arrayindex. |
| length _ ist | Die Anzahl der zu übertragenden Arrayelemente. |
| first _ is | Der Index des ersten zu übertragenden Arrayelements. |
| last _ is | Gibt den Index des letzten zu übertragenden Arrayelements an. |
| Schnur | Gibt an, dass das eindimensionale char-, wchar _ t-, byte- (oder entsprechende) Array oder der Zeiger auf ein solches Array als Zeichenfolge behandelt werden soll. |
| Bereich | Gibt einen Bereich von zulässigen Werten für Argumente oder Felder an, deren Werte zur Laufzeit festgelegt werden. |
MIDL unterstützt drei Arten von Zeigern: Verweiszeker, eindeutige Zeiger und vollständige Zeiger. Diese Zeiger werden durch die Zeigerattribute ref, uniqueund ptr angegeben.
Ein Zeigerattribut kann als Typattribut angewendet werden. als Feldattribut, das für einen Struktur member, union member oder parameter gilt; oder als Funktionsattribut, das für den Funktions-Rückgabetyp gilt. Das Zeigerattribut kann auch mit dem Zeiger-Standardschlüsselwort _ angezeigt werden.
Damit sich ein Zeigerparameter während einer Remotefunktion im Wert ändern kann, müssen Sie eine weitere Deklarierungsebene bereitstellen, indem Sie mehrere Zeigerdeklaratoren bereitstellen. Das explizite Zeigerattribut, das auf den Parameter angewendet wird, wirkt sich nur auf den zeigerdeklarator ganz rechts für den Parameter aus. Wenn eine Parameterdeklaration mehrere Zeigerdeklaratoren enthält, verwenden die anderen Deklaratoren standardmäßig das Zeigerattribut, das durch das Zeiger-Standardattribut _ angegeben wird. Um verschiedene Zeigerattribute auf mehrere Zeigerdeklaratoren anzuwenden, müssen Sie Zwischentypen definieren, die die expliziten Zeigerattribute angeben.
Standard-Pointer-Attribute Werte
Wenn keinem Zeigerattribut ein Zeiger zugeordnet ist, der ein Parameter ist, wird davon ausgegangen, dass der Zeiger ein Verweiszeiger ist.
Wenn keinem Zeigerattribut ein Zeiger zugeordnet ist, der mitglied einer Struktur oder Union ist, weist der MIDL-Compiler Zeigerattribute mithilfe der folgenden Prioritätsregeln zu (1 ist die höchste):
- Attribute, die explizit auf den Zeigertyp angewendet werden
- Attribute, die explizit auf den Zeigerparameter oder Member angewendet werden
- Das _ Zeiger-Standardattribut in der IDL-Datei, das den Typ definiert.
- Das _ Zeiger-Standardattribut in der IDL-Datei, das den Typ importiert
- ptr (osf-Modus); unique (Microsoft RPC-Standardmodus)
Wenn die IDL-Datei im Standardmodus kompiliert wird, können importierte Dateien Zeigerattribute vom Importieren von Dateien erben. Dieses Feature ist nicht verfügbar, wenn Sie mit dem Schalter /osf kompilieren. Weitere Informationen finden Sie unter Importieren von.
Funktions-Rückgabetypen
Ein Zeiger, der von einer Funktion zurückgegeben wird, muss ein eindeutiger Zeiger oder ein vollständiger Zeiger sein. Der MIDL-Compiler meldet einen Fehler, wenn ein Funktionsergebnis ein Verweiszeiger ist, entweder explizit oder standardmäßig. Der zurückgegebene Zeiger gibt immer neuen Speicher an.
Funktionen, die einen Zeigerwert zurückgeben, können ein Zeigerattribut als Funktionsattribut angeben. Wenn kein Zeigerattribut vorhanden ist, verwendet der Funktionsergebniszeiger den Wert, der als Zeiger-Standardattribut _ bereitgestellt wird.
Zeigerattribute in Typdefinitionen
Wenn Sie ein Zeigerattribut auf der obersten Ebene einer typedef-Anweisung angeben, wird das angegebene Attribut wie erwartet auf den Zeigerdeklarator angewendet. Wenn kein Zeigerattribut angegeben wird, erben Zeigerdeklaratoren auf der obersten Ebene einer Typedef-Anweisung den Zeigerattributtyp, wenn sie verwendet werden.
Die DCE-IDL lässt nicht zu, dass dasselbe Zeigerattribut explizit zweimal angewendet wird, z. B. sowohl in der Typedef-Deklaration als auch in der Parameterattributliste. Wenn Sie den Standardmodus (Microsoft-Erweiterungen) des MIDL-Compilers verwenden, wird diese Einschränkung gelockert.
Eine Erörterung der Verwendung von MIDL-Arrays und -Zeigern in Remoteprozeduraufrufen finden Sie unter Arrays und Zeiger.