Freigeben über


Benutzermarschall

Benutzermarmarsal verfügt über eine Formatzeichenfolge, die transmit_as ähnelt:

FC_USER_MARSHAL
flags<1>
quadruple_index<2>
user_type_memory_size<2>
transmitted_type_buffer size<2>
offset_to_the_transmitted_type<2>

Die Flags<1> Byte bestehen aus dem oberen Flag-Knabbel und der unteren Ausrichtung.

Die oberen 2 Bits des Flag-Nibbles werden verwendet, um zu beschreiben, ob der Drahttyp als eindeutiger Zeiger, Verweiszeiger oder kein Zeiger definiert ist (es kann sich nicht um einen Ptr handeln). Die folgenden Manifeste wurden definiert, um die Flags festzulegen/abzurufen:

#define USER_MARSHAL_UNIQUE         0x80
#define USER_MARSHAL_REF            0x40
#define USER_MARSHAL_POINTER        0xc0  /* unique or ref */
#define USER_MARSHAL_IID            0x20  /* JIT compiler only */

Die Ausrichtung des Flagworts behält die Drahtausrichtung des übertragenen Typs bei.

Der quadruple_index<2> ist ein Index des Rückrufroutine-Vierfaches der Benutzer-Marshallfunktionen. Die Routinepositionen sind wie folgt: Größenanpassung, Marshallen, Entmarsen und Befreien von Routine.

Die user_type_memory_size<2> bietet eine Größe für den benutzerspezifischen Typ, einschließlich unbekannter Typen.

Die transmitted_type_buffer_size<2> ist entweder 0, wenn die Größe variiert, oder die tatsächliche feste Größe. Dies ist eine Optimierung, die es MIDL ermöglicht, Rückrufe bei der Größenanpassung des Puffers und auch beim Freigeben zu überspringen.

Bereich

Die [Bereich]-Überprüfung bietet zusätzliche Mittel für die Argumentvalidierung auf der NDR-Ebene. Die [Bereich]-Deskriptor-Deskriptor hat das folgende Format:

FC_RANGE,   flags_type <1>
low value<4>
high value<4>

Die Flags nehmen den oberen Knabber an und geben den unteren Knabber des zweiten Byte ein. Die niedrigen und hohen Werte hängen vom Typ der zu überprüfenden Variablen ab.

Die Fahnen sind als Erweiterungsfahrzeug gedacht; der Compiler hat das Nibble auf 0 festgelegt.