Freigeben über


Zeiger (RPC)

Allgemeine Zeiger

Ein allgemeiner Zeiger wird als alles andere definiert als Schnittstellenzeiger und Bytezählerzeiger.

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 formatierten Zeichenfolgenzeiger ist. Das zweite Format wird für Zeiger auf alle anderen Typen verwendet. Zeigerattribute geben an, welches Beschreibungslayout es mit dem FC_SIMPLE_POINTER Flag ist.

pointer_type<1> ist einer der folgenden.

Zeichen formatieren 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 entkoppelt und ein neuer Zeigerwert zugewiesen wird.

Pointer_attributes<1> kann eines der Flags enthalten, die in der folgenden Tabelle angezeigt werden.

Attribut Flagge Beschreibung
01 FC_ALLOCATE_ALL_NODES Der Zeiger ist Teil eines Zuordnungsschemas (all_nodes).
02 FC_DONT_FREE Ein Zuweisungszeiger (dont_free).
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 kompatible Zeichenfolge. Dieses kennzeichen, das festgelegt wird, 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 vor der Behandlung des Zeigers referenziert werden muss.

 

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, ein konformes, variierende Array, wenn size_is() und length_is angewendet werden).

Schnittstellenzeiger

Eine Objektschnittstellenzeigerformatzeichenfolge weist eines von zwei Formaten auf, 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 der tatsächliche IID für den Schnittstellenzeiger. Die iid wird in die Formatzeichenfolge in einem Format 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<> 

Die iid_description<> ist ein Korrelationsdeskriptor und hat 4 oder 6 Byte, je nachdem, ob /robust verwendet wird. Der vom NdrComputeConformance Funktion berechnete Wert ist der IID-Zeiger.

Byte Count Pointers

Byte count pointers relate to a special optimization attribute called [byte_count]. Die folgenden Formate werden 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 hat 4 oder 6 Byte, je nachdem, ob /robust verwendet wird.

Die pointee_description<> ist eine Beschreibung des Zeigertyps.