length_is 属性

[length_is] 属性は、送信する配列要素の数を指定します。 負以外の値を指定する必要があります。

[length_is( limited-expression-list )]

パラメーター

limited-expression-list

1 つ以上の C 言語式を指定します。 各式は、送信する配列要素の数を表す整数に評価されます。 MIDL コンパイラでは、条件付き式、論理式、リレーショナル式、および算術式がサポートされています。 MIDL では、式での関数呼び出しは許可されず、インクリメント演算子とデクリメント演算子は使用できません。 複数の式をコンマで区切ります。

注釈

[length_is] 属性は、[last_is] が指定されていない場合、[last_is] 属性に対応する配列インデックスの値を決定します。 これらの配列インデックス間の関係は、length = last - first + 1 です。

[length_is] 属性は、[last_is] 属性または [string] 属性と同時に使用することはできません。

[length_is]属性または [last_is] 属性でカウントされた文字列を定義するには、[string] 属性を使用せずに文字配列またはポインターを使用します。

[length_is] 属性で定数式を使用することは、 属性の不適切な使用です。 これは有効ですが非効率的であり、コードのマーシャリングが遅くなります。

[size_is] 属性と [length_is] 属性を一緒に使用できます。 これを行うと、[ size_is] 属性によって、データに割り当てられるメモリの量が制御されます。 [length_is] 属性は、送信される要素の数を指定します。 [size_is] 属性と [length_is] 属性で指定されたメモリの量は同じである必要はありません。 たとえば、クライアントは [length_is] で渡すデータ要素の数が少ない場合でも、サーバーに [in, out] パラメーターを渡し、[size_is] で大きなメモリ割り当てを指定できます。 これにより、サーバーは受信したデータよりも多くのデータを配列に格納し、クライアントに送り返すことができます。

一般に、[入力]パラメーターまたは [out] パラメーターに [size_is][length_is] の両方を指定することは役に立ちません。 どちらの場合も、[ size_is] は メモリ割り当てを制御します。 アプリケーションで [size_is] を 使用して、送信よりも多くの配列要素を割り当てることができます ( [length_is]で指定)。 ただし、これは非効率的です。 また、[size_is] と [length_is] に同じ値を指定するのは非効率的です。 パラメーターのマーシャリング中に余分なオーバーヘッドが発生するためです。 [size_is][length_is] の値が常に同じ場合は、[length_is] 属性を省略します。

/* counted string holding at most "size" characters */ 
typedef struct 
{ 
    unsigned short size; 
    unsigned short length; 
    [size_is(size), length_is(length)] char string[*]; 
 } COUNTED_STRING_TYPE; 
 
/* counted string holding at most 80 characters */ 
typedef struct 
{ 
    unsigned short length; 
    [length_is(length)] char string[80]; 
} STATIC_COUNTED_STRING_TYPE; 
 
HRESULT Proc1(
    [in] short iLength; 
    [in, length_is(iLength)] short asNumbers[10]);

関連項目

フィールド属性

first_is

インターフェイス定義 (IDL) ファイル

last_is

max_is

min_is

size_is

string