共用方式為


長度、大小和方向屬性

在用戶端與伺服器之間傳遞陣列時,大小相關屬性 [max_is] 和 [size_is] 會決定伺服器存根配置多少陣列元素。 長度相關屬性 [length_is]、[first_is] 和 [last_is] 會決定傳送給伺服器和用戶端的元素數目。

不同的方向屬性可以套用至參數。 不過,某些方向屬性的組合可能會導致錯誤。 例如,假設您撰寫的介面會指定具有兩個參數的程式:陣列,以及陣列的傳輸長度。 dir_attr一詞是指套用至 參數的方向屬性,如下所示:

Proc1(
    [dir_attr] short *plength;
    [dir_attr, length_is(pLength)] short array[MAX_SIZE]);

下表說明每個方向屬性組合的 MIDL 編譯器行為。

Array Length 參數 從用戶端到伺服器的呼叫期間存根動作 從伺服器傳回用戶端的存根動作
[in] [in] 傳輸 參數所指示的長度和專案數目。 未傳輸任何資料。
[in] [out] 不合法;MIDL 編譯器錯誤。 不合法;MIDL 編譯器錯誤。
[in] [inout] 傳輸 length 參數所指示的長度和專案數目。 僅傳輸長度。
[out] [in] 傳輸長度。
如果陣列大小是固定的,請在伺服器上配置陣列大小,但不會傳輸任何元素。
如果陣列大小未系結,則不合法:MIDL 編譯器錯誤。
傳輸長度所指示的專案數目。
請注意,長度可以變更,而且可以有與用戶端上值不同的值。 請勿傳輸長度。
[out] [out] 在伺服器上配置長度參數的空間,但不會傳輸 參數。 如果陣列大小是固定的,請在伺服器上配置陣列大小,但不會傳輸任何元素。
如果未固定陣列大小,則不合法:MIDL 編譯器錯誤。
傳輸長度和伺服器應用程式所設定之長度所指示的元素數目。
[out] [inout] 傳輸長度參數。 如果陣列大小已系結,請在伺服器上配置陣列大小,但不會傳輸任何元素。
如果陣列大小未系結,則不合法:MIDL 編譯器錯誤。
傳輸長度。 傳輸長度所表示的陣列元素數目。
[inout] [in] 傳輸 參數所指示的長度和專案數目。 請勿傳輸長度。 傳輸長度所指示的專案數目。
請注意,長度可以變更,而且可以有與用戶端上原始值不同的值。
[inout] [out] 不合法;MIDL 編譯器錯誤。 不合法;MIDL 編譯器錯誤。
[inout] [inout] 傳輸 參數所指示的長度和專案數目。 傳輸 參數所指示的長度和專案數目。

一般而言,您不應該修改伺服器端的長度或大小參數。 如果您變更 length 參數,您可以孤立記憶體。 如需詳細資訊,請參閱 記憶體孤立