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]屬性所指定的記憶體數量不一樣。 例如,您的用戶端可能會將 [in, out] 參數傳遞至伺服器,並使用 [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]);
另請參閱