Freigeben über


Array- und Sized-Pointer attribute

MIDL bietet eine vielzahl von Features zum Übergeben von Arrays von Daten und Zeigern an Daten. Mit diesen Attributen können Sie Merkmale von Arrays und mehreren Zeigerebenen angeben.

Attribut Verwendung
size_is Gibt die Größe des Arbeitsspeichers an, der für Zeiger der Größe zugewiesen werden soll, Die Größe von Zeigern und ein- oder mehrdimensionale Arrays.
max_is Der Maximalwert für einen Arrayindex.
length_is Die Anzahl der zu übertragenden Arrayelemente.
first_is Der Index des ersten Arrayelements, das übertragen werden soll.
last_is Gibt den Index des letzten Arrayelements an, das übertragen werden soll.
Zeichenfolge Gibt an, dass das eindimensionale Zeichen, wchar_t, Bytearray (oder gleichwertig) oder der Zeiger auf ein solches Array als Zeichenfolge behandelt werden soll.
Bereich Gibt einen Bereich zulässiger Werte für Argumente oder Felder an, deren Werte zur Laufzeit festgelegt werden.

 

MIDL unterstützt drei Arten von Zeigern: Referenzzeiger, eindeutige Zeiger und vollständige Zeiger. Diese Zeiger werden durch die Zeigerattribute Bezugangegeben, eindeutigeund ptr.

Ein Zeiger-Attribut kann als Typattribute angewendet werden. als Feldattribute, das für ein Strukturmitglied, ein Union-Mitglied oder einen Parameter gilt; oder als Funktionsattribute, das für den Funktionsrücklauftyp gilt. Das Zeiger-Attribut kann auch mit dem schlüsselwort pointer_default angezeigt werden.

Damit ein Zeigerparameter während einer Remotefunktion den Wert ändern kann, müssen Sie eine weitere Dereferenzierungsebene bereitstellen, indem Sie mehrere Zeigerdeklaratoren bereitstellen. Das explizite Zeiger-Attribut, das auf den Parameter angewendet wird, wirkt sich nur auf den deklarator für den äußerst rechten Zeiger für den Parameter aus. Wenn mehrere Zeigerdeklaratoren in einer Parameterdeklaration vorhanden sind, werden die anderen Deklaratoren standardmäßig auf das zeigerattribute festgelegt, das durch das attribut pointer_default angegeben wird. Um unterschiedliche Zeigerattribute auf mehrere Zeigerdeklaratoren anzuwenden, müssen Sie Zwischentypen definieren, die die expliziten Zeigerattribute angeben.

Standardwerte für Pointer-Attribute

Wenn kein Zeiger-Attribut einem Zeiger zugeordnet ist, der ein Parameter ist, wird der Zeiger als Verweis Zeiger angenommen.

Wenn kein Zeiger-Attribut einem Zeiger zugeordnet ist, der Mitglied einer Struktur oder Vereinigung ist, weist der MIDL-Compiler Zeigerattribute mithilfe der folgenden Prioritätsregeln zu (1 ist höchste):

  1. Attribute, die explizit auf den Zeigertyp angewendet wurden
  2. Attribute, die explizit auf den Zeigerparameter oder das Element angewendet wurden
  3. Das attribut pointer_default in der IDL-Datei, das den Typ definiert
  4. Das attribut pointer_default in der IDL-Datei, die den Typ importiert
  5. ptr (Osf-Modus); eindeutigen (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 die Option /osf kompilieren. Weitere Informationen finden Sie unter import.

Funktionsrücklauftypen

Ein von einer Funktion zurückgegebener Zeiger 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 Zeigerattribute als Funktionsattribute angeben. Wenn kein Zeiger-Attribut vorhanden ist, verwendet der Funktionsergebniszeiger den als pointer_default-Attribut bereitgestellten Wert.

Zeigerattribute in Typdefinitionen

Wenn Sie ein Zeiger-Attribut auf der obersten Ebene einer typedef--Anweisung angeben, wird das angegebene Attribut wie erwartet auf den Zeigerdeklarator angewendet. Wenn kein Zeiger-Attribut angegeben wird, erben Zeigerdeklaratoren auf der obersten Ebene einer typedef-Anweisung den Zeiger-Attributtyp, wenn sie verwendet wird.

DCE IDL lässt nicht zu, dass dasselbe Zeiger-Attribut zweimal explizit angewendet wird, z. B. sowohl in der typedef-Deklaration als auch in der Parameter-Attributliste. Wenn Sie den Standardmodus (Microsoft-Erweiterungen) des MIDL-Compilers verwenden, ist diese Einschränkung entspannt.

Eine Erläuterung zur Verwendung von MIDL-Arrays und Zeigern in Remoteprozeduraufrufen finden Sie unter Arrays und Zeiger.