ポインター (RPC)

共通ポインター

共通ポインターは、インターフェイス ポインターとバイトカウント ポインター以外のすべてのものとして定義されます。

説明には、次の 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<> は、ポイント先の種類の説明です。