Zeiger (RPC)
Ein allgemeiner Zeiger wird als alles andere als Schnittstellenzeiger und Byteanzahlzeiger definiert.
Es gibt zwei mögliche Layouts für die Beschreibung:
pointer_type<1> pointer_attributes<1>
simple_type<1> FC_PAD
– oder –
pointer_type<1> pointer_attributes<1>
offset_to_complex_description<2>
Das erste Format wird verwendet, wenn der Zeiger ein Zeiger auf einen einfachen Typ oder einen nicht großen Zeichenfolgenzeiger ist. Das zweite Format wird für Zeiger auf alle anderen Typen verwendet. Zeigerattribute geben mit dem flag FC_SIMPLE_POINTER an, welches Beschreibungslayout es ist.
<pointer_type 1> ist einer der folgenden:
Formatieren von Zeichen | BESCHREIBUNG |
---|---|
FC_RP | Ein Verweiszeiger. |
FC_UP | Ein eindeutiger Zeiger. |
FC_FP | Ein vollständiger Zeiger. |
FC_OP | Ein eindeutiger Zeiger in einer Objektschnittstelle. |
Der Grund, FC_OP zu unterscheiden, ist semantisch: In Objektschnittstellen sollte ein [in,out]-Zeiger freigegeben werden, bevor ein neues Objekt getrennt und ein neuer Zeigerwert zugewiesen wird.
<Pointer_attributes 1> kann eines der in der folgenden Tabelle gezeigten Flags aufweisen.
attribute | Flag | BESCHREIBUNG |
---|---|---|
01 | FC_ALLOCATE_ALL_NODES | Der Zeiger ist Teil eines Zuordnungsschemas (all_nodes). |
02 | FC_DONT_FREE | Ein allocate(dont_free)-Zeiger. |
04 | FC_ALLOCED_ON_STACK | Ein Zeiger, dessen Referent auf dem Stapel des Stubs zugeordnet ist. |
08 | FC_SIMPLE_POINTER | Ein Zeiger auf einen einfachen Typ oder eine nicht konforme Zeichenfolge. Dieses festgelegte Flag gibt das Layout der Zeigerbeschreibung als das oben beschriebene einfache Zeigerlayout an, andernfalls wird das Deskriptorformat mit dem Offset angegeben. |
10 | FC_POINTER_DEREF | Ein Zeiger, der dereferenziert werden muss, bevor der Zeigerreferent behandelt wird. |
Zeiger, auf die size_is(), max_is(), length_is(), last_is() und/oder first_is() angewendet wurden, weisen Formatzeichenfolgenbeschreibungen auf, die mit einem Zeiger auf ein Array des entsprechenden Typs identisch sind (z. B. ein konformes Array, wenn size_is() angewendet wird, und ein konformes unterschiedliches Array, wenn size_is() und length_is angewendet werden).
Eine Objektschnittstellenzeigerformatzeichenfolge hat eines von zwei Formaten, je nachdem, ob die entsprechende IID dem Compiler bekannt ist.
Ein Schnittstellenzeiger mit einer konstanten IID hat die folgende Beschreibung:
FC_IP FC_CONSTANT_IID
iid<16>
Der iid<16-Teil> ist die tatsächliche IID für den Schnittstellenzeiger. Die iid wird in einem Format in die Formatzeichenfolge geschrieben, das mit der GUID-Datenstruktur identisch ist: long, short, short, char [8].
Die Beschreibung eines Schnittstellenzeigers, auf den iid_is() angewendet wird, lautet:
FC_IP FC_PAD
iid_description<>
Der iid_description<> ist ein Korrelationsdeskriptor und hat 4 oder 6 Bytes, je nachdem, ob /robust verwendet wird. Der von der NdrComputeConformance-Funktion berechnete Wert ist der IID-Zeiger.
Byteanzahlzeiger beziehen sich auf ein spezielles Optimierungsattribut namens [byte_count]. Es werden die folgenden Formate verwendet:
FC_BYTE_COUNT_POINTER
simple_type<1>
byte_count_description<>
–Und–
FC_BYTE_COUNT_POINTER
FC_PAD
byte_count_description<>
pointee_description<>
Die byte_count_description<> ist ein Korrelationsdeskriptor und verfügt über 4 oder 6 Bytes, je nachdem, ob /robust verwendet wird.
Die pointee_description<> ist eine Beschreibung des Pointee-Typs.