共用方式為


記憶體配置規則的摘要

下表摘要說明有關記憶體配置的重要規則。

MIDL 元素 描述
最上層 [ ref] 指標 必須是非 Null 指標。
函式傳回值 新的記憶體一律會配置給指標傳回值。
[ uniqueout] 或 [ ptr, out] 指標 MIDL 不允許。
非最上層 [uniqueinout] 或 [ptr, in, in, out] 指標,從 Null 變更為非 Null 用戶端存根會在傳回時在用戶端上配置新的記憶體。
非最上層 [uniqueinout] 指標,從非 Null 變更為 Null 用戶端上的記憶體被遺棄;用戶端應用程式負責釋放記憶體,並防止外泄。
非最上層 [ptrinout] 指標,從非 Null 變更為 Null 如果用戶端上沒有別名,記憶體將會被遺棄;用戶端應用程式負責釋放並防止在此情況下發生記憶體流失。
[ref] 指標 用戶端應用程式層通常會配置。
非 Null [inout] 指標 存根嘗試寫入用戶端上的現有儲存體。 如果 [字串] 和大小增加超過用戶端上配置的大小,則會在傳回時造成 GP 錯誤。

 

下表摘要說明金鑰識別碼L 和 ACF 屬性對記憶體管理的影響。

MIDL 功能 用戶端問題 伺服器問題
[ allocate (single_node) ], [allocate (all_nodes) ] 判斷是否對記憶體函式進行一或多個呼叫。 與用戶端相同,除了私人記憶體之外,通常可用於配置 (single_node) [in] 和 [in,out] 資料。
[allocate (free) ] 或 [allocate (dont_free) ] (無;影響 server.) 判斷伺服器上的記憶體是否在每個遠端程序呼叫之後釋放。
陣列屬性 [ max_is] 和 [ size_is] (無;影響 server.) 決定要配置的記憶體大小。
[ byte_count] 用戶端必須配置緩衝區;用戶端存根未配置或釋放。 ACF 參數屬性會決定伺服器上配置的緩衝區大小。
[ enable_allocate] 通常不會。 不過,用戶端可能會使用不同的記憶體管理環境。 伺服器使用不同的記憶體管理環境。 RpcSmAllocate 應該用於配置。
[ in]attribute 負責配置資料的記憶體的用戶端應用程式。 依存根配置於伺服器上。
[ out] 屬性 依存根配置於用戶端上。 [out]-only 指標必須是 [ref] 指標;依存根配置於伺服器上。
[ ref] 屬性 指標所參考的記憶體必須由用戶端應用程式配置。 存根所管理的最上層和第一層參考指標。
[ unique] 屬性 非 Null 到 Null 可能會導致孤立的記憶體;null 到非 Null 會導致用戶端存根呼叫 midl_user_allocate (會影響 client.)
[ ptr] 屬性 (請參閱 [ unique].) (請參閱 [ unique].)