陣列和Sized-Pointer屬性

MIDL 提供一組豐富的功能,可用來傳遞資料陣列和資料指標。 您可以使用這些屬性來指定陣列的特性和多個指標層級。

屬性 使用方式
size_is 指定要配置給大小指標的記憶體數量、調整大小指標的大小指標,以及單一或多維度陣列。
max_is 陣列索引的最大值。
length_is 要傳輸的陣列元素數目。
first_is 要傳輸之第一個陣列專案的索引。
last_is 提供要傳送的最後一個陣列專案的索引。
string 表示一維 charwchar_t位元組 (或對等的) 陣列或這類陣列的指標要當做字串處理。
範圍 指定在執行時間設定其值之引數或欄位的允許值範圍。

 

MIDL 支援三種指標:參考指標、唯一指標和完整指標。 這些指標是由指標屬性 refuniqueptr所指定。

指標屬性可以套用為類型屬性;當做套用至結構成員、聯集成員或參數的欄位屬性;或 作為套用至函式傳回型別的函式屬性。 指標屬性也可以與 pointer_default 關鍵字一起出現。

若要允許指標參數在遠端函式期間變更值,您必須提供多個指標宣告子來提供另一層間接取值。 套用至參數的明確指標屬性只會影響參數最右邊的指標宣告子。 當參數宣告中有多個指標宣告子時,其他宣告子會預設為 pointer_default 屬性所指定的指標屬性。 若要將不同的指標屬性套用至多個指標宣告子,您必須定義指定明確指標屬性的中繼類型。

預設Pointer-Attribute值

當沒有任何指標屬性與參數的指標相關聯時,會將指標假設為 ref 指標。

當沒有任何指標屬性與屬於結構或等位成員的指標相關聯時,MIDL 編譯器會使用下列優先順序規則指派指標屬性, (1 為最高) :

  1. 明確套用至指標類型的屬性
  2. 明確套用至指標參數或成員的屬性
  3. IDL 檔案中定義型別的 pointer_default 屬性
  4. IDL 檔案中匯入型別的 pointer_default 屬性
  5. ptr (osf 模式) ; 一 (Microsoft RPC 預設模式)

以預設模式編譯 IDL 檔案時,匯入的檔案可以從匯入檔案繼承指標屬性。 當您使用 /osf 參數進行編譯時,無法使用此功能。 如需詳細資訊,請參閱 匯入

函式傳回型別

函式傳回的指標必須是 一指標或完整指標。 如果函式結果是明確或預設的參考指標,MIDL 編譯器會報告錯誤。 傳回的指標一律會指出新的儲存體。

傳回指標值的函式可以將指標屬性指定為函式屬性。 如果指標屬性不存在,函式結果指標會使用提供的值作為 pointer_default 屬性。

類型定義中的指標屬性

當您在 typedef 語句的最上層指定指標屬性時,指定的屬性會如預期般套用至指標宣告子。 未指定指標屬性時,typedef 語句最上層的指標宣告子會在使用時繼承指標屬性類型。

DCE IDL 不允許明確套用相同的指標屬性兩次,例如,在 typedef 宣告和參數屬性清單中。 當您使用 MIDL 編譯器的預設 (Microsoft 延伸模組) 模式時,會放寬此條件約束。

如需在遠端程序呼叫中使用 MIDL 陣列和指標的討論,請參閱 陣列和指標