配列属性の組み合わせ

スタブが情報を使用して配列のサイズとサーバーに送信するバイト数を決定できる限り、フィールド属性はさまざまな組み合わせで提供できます。 属性間のリレーションシップは、次の数式を使用して定義されます。

size_is = max_is + 1;
length_is = last_is - first_is + 1;

属性に関連付けられている値は、これらの数式に基づくいくつかの一般的なルールに従う必要があります。 これらの規則は次のとおりです。

  • 0 より小さい [first_is] インデックス値または [last_is] 値が [max_is] より大きい値を指定しないでください。
  • 配列に負のサイズを指定しないでください。 長さの値が 0 以上になるように、最初と最後の要素を定義します。 サイズが 0 以上になるように [max_is] 値を定義します。 /error bounds_check オプションを指定して MIDL が呼び出された場合、スタブは、サイズが 0 より小さい場合、または転送される長さが 0 未満の場合に例外を発生させます。
  • [length_is] 属性と [last_is] 属性を同時に使用したり、[size_is] 属性と [last_is] 属性を同時に使用したりしないでください。

配列とポインターの間の C の密接な関係のため、MIDL では、ポインター表記を使用してパラメーター リストで配列を宣言することもできます。 MIDL は、パラメーターに一般的に配列に関連付けられている属性がある場合、型へのポインターであるパラメーターをその型の配列として扱います。

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45)
  version(6.0) 
]
interface arraytest
{
  void fArray6([in] short sSize, 
               [in, out, size_is(sSize)] char * p1);
  void fArray7([in] short sSize, 
               [in, out, size_is(sSize)] char achArray[]);
}

前の例では、関数 fArray6 と fArray7 の配列パラメーターとポインター パラメーターは同等です。