ref-Attribut
Das [ref] -Attribut identifiziert einen Verweiszeiger. Es wird einfach verwendet, um eine Dereferenzierungsebene darzustellen.
pointer_default(ref)
typedef [ ref [[ , type-attribute-list ]] ] type-specifier declarator-list;
typedef [ struct | union ]
{
[ ref [[ , field-attribute-list ]] ] type-specifier declarator-list;
...}
[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
[ ref [[ , parameter-attribute-list ]] ] type-specifier [[standard-declarator]]
, ...);
-
type-attribute-list
-
Gibt mindestens ein Attribut an, das für den Typ gilt. Gültige Typattribute sind [handle], [switch_type], [transmit_as]; die Zeigerattribute [ref], [eindeutig] oder [ptr]; und die Verwendungsattribute [context_handle], [Zeichenfolge] und [ignorieren]. Trennen Sie mehrere Attribute durch Kommas.
-
Typspezifizierer
-
Gibt einen Basistyp, eine Struktur, einen Union- oder Enumerationstyp oder einen Typbezeichner an. Eine optionale Speicherspezifikation kann dem Typbezeichner vorangestellt werden.
-
Standarddeklarator
-
Gibt einen C-Standard-Deklarator an, z. B. einen Bezeichner, einen Zeiger-Deklarator oder einen Array-Deklarator. Weitere Informationen finden Sie unter Array- und Sized-Pointer Attribute, Arrays und Arrays und Zeiger.
-
deklarator-list
-
Gibt Standard-C-Deklaratoren an, z. B. Bezeichner, Zeiger-Deklaratoren und Array-Deklaratoren. Weitere Informationen finden Sie unter Array- und Sized-Pointer Attribute, Arrays und Arrays und Zeiger. Die Deklaratorliste besteht aus einem oder mehreren Deklaratoren, die durch Kommas getrennt sind. Der Parameternamebezeichner im Funktionsdeklarator ist optional.
-
field-attribute-list
-
Gibt null oder mehr Feldattribute an, die für die Struktur, den Union-Member oder den Funktionsparameter gelten. Gültige Feldattribute sind [first_is], [last_is], [length_is], [max_is], [size_is]; die Verwendungsattribute [Zeichenfolge], [ignorieren] und [context_handle]; das Zeigerattribute [ref], [unique] oder [ptr]; und das Union-Attribut [switch_type]. Trennen Sie mehrere Feldattribute durch Kommas.
-
function-attribute-list
-
Gibt null oder mehr Attribute an, die für die Funktion gelten. Gültige Funktionsattribute sind [Rückruf], [lokal]; das Zeigerattribute [ref], [unique] oder [ptr]; und die Verwendungsattribute [Zeichenfolge], [ignorieren] und [context_handle].
-
ptr-decl
-
Gibt mindestens einen Zeigerdeklarator an, für den das [ref] -Attribut gilt. Ein Zeigerdeklarations-Deklarator ist mit dem in C verwendeten Zeiger-Deklarator identisch. es wird aus dem *-Designator, Modifizierern wie far und dem Qualifizierer const erstellt.
-
Funktionsname
-
Gibt den Namen der Remoteprozedur an.
-
parameter-attribute-list
-
Besteht aus null oder mehr Attributen, die für den angegebenen Parametertyp geeignet sind. Parameterattribute können die Richtungsattribute [in] und [out]; die Feldattribute [first_is], [last_is], [length_is], [max_is], [size_is] und [switch_type]; das Zeigerattribute [ref], [unique] oder [ptr]; und die Nutzungsattribute [context_handle] und [Zeichenfolge]. Das Verwendungsattribut [ignore] kann nicht als Parameterattribute verwendet werden. Trennen Sie mehrere Attribute durch Kommas.
Ein Zeigerattribute kann als Typattribute als Feldattribute angewendet werden, das für ein Strukturelement, ein Unionmitglied oder einen Parameter gilt. oder als Funktionsattribute, das für den Funktionsrückgabetyp gilt. Das Zeigerattribute kann auch mit dem [pointer_default] Schlüsselwort (keyword) angezeigt werden.
Ein Verweiszeiger weist die folgenden Merkmale auf:
- Verweist immer auf gültigen Speicher; hat nie den Wert NULL. Ein Verweiszeiger kann immer abgeleitet werden.
- Ändert sich während eines Anrufs nie. Ein Verweiszeiger verweist immer auf denselben Speicher auf dem Client vor und nach dem Aufruf.
- Weist keinen neuen Arbeitsspeicher auf dem Client zu. Vom Server zurückgegebene Daten werden in den vorhandenen Speicher geschrieben, der durch den Wert des Verweiszeigers vor dem Aufruf angegeben wird.
- Führt nicht zu Aliasing. Der Speicher, auf den ein Verweiszeiger verweist, kann von keinem anderen Namen in der Funktion erreicht werden.
Ein Verweiszeiger kann nicht als Typ eines Zeigers verwendet werden, der von einer Funktion zurückgegeben wird.
Wenn kein Attribut für einen Zeigerparameter der obersten Ebene angegeben wird, wird es als Verweiszeiger behandelt.
[unique] char * GetFirstName(
[in, ref] char * pszFullName);