length_is 屬性

[length_is]屬性會指定要傳輸的陣列元素數目。 您必須指定非負值。

[length_is( limited-expression-list )]

參數

limited-expression-list

指定一或多個 C 語言運算式。 每個運算式都會評估為整數,代表要傳輸的陣列元素數目。 MIDL 編譯器支援條件運算式、邏輯運算式、關聯運算式和算術運算式。 MIDL 不允許運算式中的函式呼叫,而且不允許遞增和遞減運算子。 以逗號分隔多個運算式。

備註

未指定 [last_is] 時,[length_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]屬性所指定的記憶體數量不一樣。 例如,您的用戶端可能會將 [inout] 參數傳遞至伺服器,並使用 [size_is]指定大型記憶體配置,即使它指定要以 [length_is]傳遞的少量資料元素也一樣。 這可讓伺服器填入比收到的資料更多的陣列,然後傳送回用戶端。

一般而言,在 [in][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

字串