長さ、サイズ、および方向属性
クライアントとサーバーの間で配列を渡す場合、サイズ関連の属性 [max_is] と [size_is] によって、サーバー スタブによって割り当てられる配列要素の数が決まります。 長さ関連の属性 [length_is]、[first_is]、および [last_is] によって、サーバーとクライアントの両方に送信される要素の数が決まります。
さまざまな方向属性をパラメーターに適用できます。 ただし、一部の方向属性の組み合わせによってエラーが発生する可能性があります。 たとえば、配列と配列の転送長の 2 つのパラメーターを持つプロシージャを指定するインターフェイスを記述しているとします。 dir_attrという用語は、パラメーターに適用される方向属性を次のように参照します。
Proc1(
[dir_attr] short *plength;
[dir_attr, length_is(pLength)] short array[MAX_SIZE]);
次の表では、方向属性の組み合わせごとに MIDL コンパイラの動作について説明します。
Array | Length パラメーター | クライアントからサーバーへの呼び出し中のスタブ アクション | サーバーからクライアントへの戻り時のスタブ アクション |
---|---|---|---|
[入力] | [入力] | パラメーターによって示される要素の長さと数を送信します。 | データは送信されません。 |
[入力] | [out] | 法的ではありません。MIDL コンパイラ エラー。 | 法的ではありません。MIDL コンパイラ エラー。 |
[入力] | [入力、 出力] | length パラメーターで示される要素の長さと数を送信します。 | 長さのみを送信します。 |
[out] | [入力] | 長さを送信します。 配列サイズが固定されている場合は、サーバーに配列サイズを割り当てますが、要素は送信しません。 配列サイズがバインドされていない場合、有効ではありません: MIDL コンパイラ エラー。 |
長さによって示される要素の数を送信します。 長さは変更でき、クライアントの値とは異なる値を持つことができます。 長さを送信しないでください。 |
[out] | [out] | サーバーで length パラメーターの領域を割り当てますが、パラメーターは送信しません。 配列サイズが固定されている場合は、サーバーに配列サイズを割り当てますが、要素は送信しません。 配列サイズが固定されていない場合、有効ではありません: MIDL コンパイラ エラー。 |
サーバー アプリケーションによって設定された長さによって示される要素の長さと数を送信します。 |
[out] | [入力、 出力] | 長さパラメーターを送信します。 配列サイズがバインドされている場合は、サーバーに配列サイズを割り当てますが、要素は送信しません。 配列サイズがバインドされていない場合、有効ではありません: MIDL コンパイラ エラー。 |
長さを送信します。 長さによって示される配列要素の数を送信します。 |
[入力、 出力] | [入力] | パラメーターによって示される要素の長さと数を送信します。 | 長さを送信しないでください。 長さによって示される要素の数を送信します。 長さは変更でき、クライアントの元の値とは異なる値を持つことができます。 |
[入力、 出力] | [out] | 法的ではありません。MIDL コンパイラ エラー。 | 法的ではありません。MIDL コンパイラ エラー。 |
[入力、 出力] | [入力、 出力] | パラメーターによって示される要素の長さと数を送信します。 | パラメーターによって示される要素の長さと数を送信します。 |
一般に、サーバー側で長さまたはサイズのパラメーターを変更しないでください。 length パラメーターを変更すると、メモリを孤立させることができます。 詳細については、「 メモリ孤立」を参照してください。