ユーザーマーシャリング
ユーザー マーシャリングには、transmit_asに似た書式指定文字列があります。
FC_USER_MARSHAL
flags<1>
quadruple_index<2>
user_type_memory_size<2>
transmitted_type_buffer size<2>
offset_to_the_transmitted_type<2>
フラグ<1> バイトは、上位フラグニブルと下位アラインメントニブルで構成されます。
フラグニブルの上位 2 ビットは、ワイヤの種類が一意のポインター、参照ポインター、またはポインターなしとして定義されているかどうかを示すために使用されます (ptr にすることはできません)。 フラグを設定または取得するために、次のマニフェストが定義されています。
#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 */
フラグ ワードのアラインメント ニブルは、送信されるタイプのワイヤアラインメントを維持します。
quadruple_index<2> は、ユーザーマーシャリング関数のコールバック ルーチン 4 倍のインデックスです。 ルーチンの位置は、サイズ変更、マーシャリング、マーシャリング解除、および解放ルーチンです。
user_type_memory_size<2> は、不明な型を含むユーザー固有の型のサイズを提供します。
transmitted_type_buffer_size<2> は、サイズが変化している場合は 0 か、実際の固定サイズです。 これは、MIDL がバッファーのサイズ設定時と解放時にコールバックをスキップできるようにする最適化です。
範囲
[範囲] チェックでは、NDR レイヤーでの引数検証のための追加の手段が提供されます。 [range] 記述子の形式は次のとおりです。
FC_RANGE, flags_type <1>
low value<4>
high value<4>
フラグは上のニブルを受け取り、型は 2 番目のバイトの下位ニブルを受け取ります。 低い値と高い値は、チェックする変数の型によって異なります。
旗は拡張車両として意図されています。コンパイラは nibble を 0 に設定しています。