陣列和 Sized-Pointer 屬性
MIDL 提供一組豐富的功能,可用來傳遞數據陣列和數據指標。 您可以使用這些屬性來指定數位的特性和多個指標層級。
屬性 | 用法 |
---|---|
size_is | 指定要配置給大小指標的記憶體數量、大小為大小指標的指標,以及單一或多維度陣列。 |
max_is | 陣列索引的最大值。 |
length_is | 要傳輸的陣列項目數目。 |
first_is | 要傳輸之第一個陣列專案的索引。 |
last_is | 提供要傳輸之最後一個陣列專案的索引。 |
字串 | 表示一維 char、wchar_t、位元組 (或對等的) 陣列,或這類數位的指標,會以字串的形式處理。 |
範圍 | 指定在運行時間設定其值之自變數或欄位的允許值範圍。 |
MIDL 支援三種指標:參考指標、唯一指標和完整指標。 這些指標是由 ref、唯一和 ptrref 屬性所指定。
指標屬性可以套用為類型屬性;做為適用於結構成員、等位成員或參數的欄位屬性;或作為套用至函式傳回型別的函式屬性。 指標屬性也可以與 pointer_default 關鍵詞一起顯示。
若要允許指標參數在遠端函式期間變更值,您必須提供多個指標宣告子來提供另一個間接取值層級。 套用至參數的明確指標屬性只會影響參數最右邊的指標宣告子。 當參數宣告中有多個指標宣告子時,其他宣告子預設為 pointer_default 屬性所指定的指標屬性。 若要將不同的指標屬性套用至多個指標宣告子,您必須定義指定明確指標屬性的中繼類型。
預設 Pointer-Attribute 值
當指標屬性與參數的指標相關聯時,指標會假設為 ref 指標。
當沒有任何指標屬性與屬於結構或等位成員的指標相關聯時,MIDL 編譯程式會使用下列優先順序規則指派指標屬性(1 為最高):
- 明確套用至指標類型的屬性
- 明確套用至指標參數或成員的屬性
- IDL 檔案中定義型別的 pointer_default 屬性
- IDL 檔案中匯入型別的 pointer_default 屬性
- ptr (osf 模式):唯一 (Microsoft RPC 預設模式)
在預設模式中編譯 IDL 檔案時,匯入的檔案可以從匯入檔案繼承指標屬性。 當您使用 /osf 參數進行編譯時,無法使用此功能。 如需詳細資訊,請參閱 匯入。
函式傳回型別
函式傳回的指標必須是唯一指標或完整指標。 如果函式結果是明確或預設的參考指標,MIDL 編譯程式會報告錯誤。 傳回的指標一律表示新的記憶體。
傳回指標值的函式可以將指標屬性指定為函式屬性。 如果指標屬性不存在,則函式結果指標會使用提供作為 pointer_default 屬性的值。
類型定義中的指標屬性
當您在 typedef 語句的最上層指定指標屬性時,指定的屬性會如預期般套用至指標宣告子。 未指定指標屬性時,typedef 語句最上層的指標宣告子會在使用時繼承指標屬性類型。
DCE IDL 不允許明確套用相同的指標屬性兩次,例如,在 typedef 宣告和參數屬性清單中。 當您使用 MIDL 編譯程式的預設(Microsoft延伸模組)模式時,此條件約束會放寬。
如需在遠端過程呼叫中使用 MIDL 陣列和指標的討論,請參閱 陣列和指標。