長度、大小和方向屬性
在用戶端與伺服器之間傳遞陣列時,大小相關屬性 [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] | [in, out] | 傳輸 length 參數所指示的長度和專案數目。 | 僅傳輸長度。 |
[out] | [in] | 傳輸長度。 如果陣列大小是固定的,請在伺服器上配置陣列大小,但不會傳輸任何元素。 如果陣列大小未系結,則不合法:MIDL 編譯器錯誤。 |
傳輸長度所指示的專案數目。 請注意,長度可以變更,而且可以有與用戶端上值不同的值。 請勿傳輸長度。 |
[out] | [out] | 在伺服器上配置長度參數的空間,但不會傳輸 參數。 如果陣列大小是固定的,請在伺服器上配置陣列大小,但不會傳輸任何元素。 如果未固定陣列大小,則不合法:MIDL 編譯器錯誤。 |
傳輸長度和伺服器應用程式所設定之長度所指示的元素數目。 |
[out] | [in, out] | 傳輸長度參數。 如果陣列大小已系結,請在伺服器上配置陣列大小,但不會傳輸任何元素。 如果陣列大小未系結,則不合法:MIDL 編譯器錯誤。 |
傳輸長度。 傳輸長度所表示的陣列元素數目。 |
[in, out] | [in] | 傳輸 參數所指示的長度和專案數目。 | 請勿傳輸長度。 傳輸長度所指示的專案數目。 請注意,長度可以變更,而且可以有與用戶端上原始值不同的值。 |
[in, out] | [out] | 不合法;MIDL 編譯器錯誤。 | 不合法;MIDL 編譯器錯誤。 |
[in, out] | [in, out] | 傳輸 參數所指示的長度和專案數目。 | 傳輸 參數所指示的長度和專案數目。 |
一般而言,您不應該修改伺服器端的長度或大小參數。 如果您變更 length 參數,您可以孤立記憶體。 如需詳細資訊,請參閱 記憶體孤立。