次の方法で共有


パラメーター記述子

前述のように、–Oi–Oif スタイルのパラメーター記述子存在します。

–Oi パラメーター記述子

完全に解釈されたスタブには、RPC 呼び出しの各パラメーターに関する追加情報が必要です。 プロシージャのパラメーターの説明は、プロシージャの説明の直後に続きます。

シンプル –大井

パラメーター記述子

[] または単純型パラメーターの戻り値の説明の形式は次のとおりです。

FC_IN_PARAM_BASETYPE 
simple_type<1>

–又は–

FC_RETURN_PARAM_BASETYPE 
simple_type<1>

ここで、simple_type<1> は、単純型を示す FC トークンです。 コードは次のとおりです。

4e  FC_IN_PARAM_BASETYPE 
53  FC_RETURN_PARAM_BASETYPE

その他 –大井

パラメーター記述子

他のすべてのパラメーター型の説明の形式は次のとおりです。

param_direction<1> 
stack_size<1> 
type_offset<2>

これらの各説明の param_direction<1> フィールドは、次の表に示すフィールドのいずれかである必要があります。

16 進 意味
4d FC_IN_PARAM in パラメーター。
50 FC_IN_OUT_PARAM 入力/出力パラメーター。
51 FC_OUT_PARAM out パラメーター。
52 FC_RETURN_PARAM プロシージャの戻り値。
4f FC_IN_PARAM_NO_FREE_INST 解放が行われなかったパラメーターとしての xmit/rep 内。

 

stack_size<1> は、スタック上のパラメーターのサイズであり、パラメーターがスタック上で占める整数の数として表されます。

手記

–Oi モードは、64 ビット プラットフォームではサポートされていません。

 

type_offset<2> フィールドは、引数の型記述子を示す、型書式指定文字列テーブル内のオフセットです。

–Oif パラメーター記述子

パラメーターの説明には 2 つの形式があり、1 つは基本型用で、もう 1 つは他のすべての型に使用できます。

基本型:

PARAM_ATTRIBUTES<2> 
stack_offset<2> 
type_format_char<1> 
unused<1>

他:

PARAM_ATTRIBUTES<2> 
stack_offset<2> 
type_offset<2>

どちらのstack_offset<2> でも、仮想引数スタックのオフセットがバイト単位で示されます。 基本型の場合、引数の型は型に対応する書式文字によって直接指定されます。 他の型の場合、type_offset<2> フィールドは、引数の型記述子が配置されている型書式指定文字列テーブル内のオフセットを指定します。

パラメーター属性フィールドは次のように定義されます。

typedef struct
  {
  unsigned short  MustSize            : 1;    // 0x0001
  unsigned short  MustFree            : 1;    // 0x0002
  unsigned short  IsPipe              : 1;    // 0x0004
  unsigned short  IsIn                : 1;    // 0x0008
  unsigned short  IsOut               : 1;    // 0x0010
  unsigned short  IsReturn            : 1;    // 0x0020
  unsigned short  IsBasetype          : 1;    // 0x0040
  unsigned short  IsByValue           : 1;    // 0x0080
  unsigned short  IsSimpleRef         : 1;    // 0x0100
  unsigned short  IsDontCallFreeInst  : 1;    // 0x0200
  unsigned short  SaveForAsyncFinish  : 1;    // 0x0400
  unsigned short  Unused              : 2;
  unsigned short  ServerAllocSize     : 3;    // 0xe000
  } PARAM_ATTRIBUTES, *PPARAM_ATTRIBUTES;
  • MustSize ビットは、パラメーターのサイズを設定する必要がある場合にのみ設定されます。
  • サーバーがパラメーターの NdrFree* ルーチンを呼び出す必要がある場合、MustFree ビットが設定されます。
  • IsSimpleRef ビットは、別のポインター以外への参照ポインターであり、割り当て属性がないパラメーターに対して設定されます。 このような型の場合、パラメーターの説明の type_offset<> フィールドは、基本型への参照ポインターを除き、参照先の型へのオフセットを提供します。参照ポインターはスキップされます。
  • IsDontCallFreeInst ビットは、空きインスタンス ルーチンを呼び出してはならない特定のrepresent_as パラメーターに対して設定されます。
  • ServerAllocSize ビットは、パラメーターが [out]、[内の]、または [in,out] ポインターである場合は 0 以外であり、I_RpcAllocateの呼び出しを使用するのではなく、サーバー インタープリターのスタックで初期化されます。 0 以外の場合、この値に 8 を乗算して、パラメーターのバイト数を取得します。 そうすることで、ポインターに少なくとも 8 バイトが常に割り当てられることに注意してください。
  • IsBasetype ビットは、メイン -Oif インタープリター ループによってマーシャリングされる単純型に対して設定されます。 特に、範囲属性を持つ単純型は、FC_RANGE トークンを使用したディスパッチによって範囲ルーチンのマーシャリングを強制するために、基本型としてフラグが設定されません。
  • IsByValue ビットは、値によって送信される複合型に対して設定されますが、引数がポインターであるかどうかに関係なく、単純型には設定されません。 設定される複合型は、構造体、共用体、transmit_asrepresent_aswire_marshal、SAFEARRAY です。 一般に、ビットは、–Oicf インタープリターでメイン インタープリター ループの利点を得るために導入され、非シンプルな引数 (複合型引数と呼ばれます) が正しく逆参照されるようにしました。 このビットは、以前のバージョンのインタープリターでは使用されませんでした。