共通ポインター
共通ポインターは、インターフェイス ポインターとバイト カウント ポインター以外のすべてのものとして定義されます。
説明には、次の 2 つのレイアウトが考えられます。
pointer_type<1> pointer_attributes<1>
simple_type<1> FC_PAD
–又は–
pointer_type<1> pointer_attributes<1>
offset_to_complex_description<2>
最初の形式は、ポインターが単純型または非初期化文字列ポインターへのポインターである場合に使用されます。 2 番目の形式は、他のすべての型へのポインターに使用されます。 ポインター属性は、FC_SIMPLE_POINTER フラグを持つ説明レイアウトを示します。
pointer_type<1> は、次のいずれかです。
| 文字の書式設定 | 形容 |
|---|---|
| FC_RP | 参照ポインター。 |
| FC_UP | 一意のポインター。 |
| FC_FP | 完全なポインター。 |
| FC_OP | オブジェクト インターフェイス内の一意のポインター。 |
FC_OPを区別する理由はセマンティックです。オブジェクト インターフェイスでは、新しいオブジェクトのマーシャリングを解除して新しいポインター値を割り当てる前に、[in,out] ポインターを解放する必要があります。
Pointer_attributes<1> は、次の表に示す任意のフラグを持つことができます。
| 属性 | 旗 | 形容 |
|---|---|---|
| 01 | FC_ALLOCATE_ALL_NODES | ポインターは、allocate(all_nodes) 割り当てスキームの一部です。 |
| 02 | FC_DONT_FREE | allocate(dont_free) ポインター。 |
| 04 | FC_ALLOCED_ON_STACK | 参照先がスタブのスタックに割り当てられているポインター。 |
| 08 | FC_SIMPLE_POINTER | 単純型または非対応の準拠文字列へのポインター。 このフラグが設定されている場合は、上で説明した単純なポインター レイアウトとしてのポインター記述のレイアウトを示します。それ以外の場合は、オフセットを含む記述子形式が示されます。 |
| 10 | FC_POINTER_DEREF | ポインターの参照先を処理する前に逆参照する必要があるポインター。 |
size_is()、max_is()、length_is()、last_is()、first_is() が適用されているポインターには、適切な型の配列へのポインター (たとえば、size_is() が適用されている場合は準拠配列、size_is() とlength_isが適用されている場合は準拠する配列) へのポインターと同じ書式文字列の説明があります。
インターフェイス ポインター
オブジェクト インターフェイス ポインターの書式指定文字列には、対応する IID がコンパイラに認識されているかどうかに応じて、2 つの形式のいずれかが含まれます。
定数 IID を持つインターフェイス ポインターには、次の説明があります。
FC_IP FC_CONSTANT_IID
iid<16>
iid<16> 部分は、インターフェイス ポインターの実際の IID です。 iid は GUID データ構造と同じ形式で書式指定文字列に書き込まれます:long、short、short、char [8]。
iid_is() が適用されたインターフェイス ポインターの説明は次のとおりです。
FC_IP FC_PAD
iid_description<>
iid_description<>は相関記述子であり、/robust が使用されているかどうかに応じて 4 バイトまたは 6 バイトです。 NdrComputeConformance 関数によって計算される値は、IID ポインターです。
バイト数ポインター
バイト数ポインターは、[byte_count] という特殊な最適化属性に関連します。 次の形式が使用されます。
FC_BYTE_COUNT_POINTER
simple_type<1>
byte_count_description<>
–そして–
FC_BYTE_COUNT_POINTER
FC_PAD
byte_count_description<>
pointee_description<>
byte_count_description<>は相関記述子であり、/robustが使用されているかどうかに応じて 4 バイトまたは 6 バイト。
pointee_description<>は、ポイント先の種類の説明です。