記憶體管理規則

介面指標的存留期一律透過每個 COM 介面上的 AddRefRelease 方法進行管理。 如需詳細資訊,請參閱 管理參考計數的規則。

對於所有其他參數,請務必遵守管理記憶體的特定規則。 下列規則適用於介面方法的所有參數,包括未以值傳遞的傳回值:

  • 參數內必須由呼叫端配置和釋放。
  • Out-parameters 必須由所呼叫的參數配置;呼叫端會使用標準 COM 工作記憶體配置器來釋放它們。 如需詳細資訊,請參閱 OLE 記憶體配置器
  • In/out 參數最初是由呼叫端所配置,然後視需要釋放並重新配置呼叫的參數。 如同 out 參數的 true,呼叫端負責釋放最終傳回的值。 必須使用標準 COM 記憶體配置器。

在後兩個案例中,一段程式代碼會配置記憶體,另一段程式代碼釋放它,使用 COM 配置器可確保這兩個程式代碼片段使用相同的配置方法。

另一個需要特別注意的領域是處理失敗狀況中的輸出和輸出參數。 如果函式傳回失敗碼,呼叫端通常無法清除 out 或 out 參數。 這會導致下列其他規則:

  • 如果發生錯誤狀況,參數必須一律可靠地設定為值,且不會由呼叫端採取任何動作即可清除。
  • 所有 out 指標參數都必須明確設定為 NULL。 這些通常會傳入指針對指標參數,但也可以當做呼叫端配置的結構成員傳遞,並填入呼叫的程序代碼。 確保這是在函式專案上將這些值設定為 NULL 的最直接方式。 此規則很重要,因為它可提升更強固的應用程式互操作性。
  • 在錯誤狀況下,所有輸出參數都必須由呼叫的程式代碼單獨保留(因此,保留於呼叫端初始化的值),或明確設定,如 out 參數錯誤傳回案例所示。

請記住,COM 應用程式的這些記憶體管理慣例僅適用於公用介面和 API;完全不需要在 COM 應用程式內部嚴格配置記憶體配置,必須使用這些機制來完成。

COM 內部會使用遠端過程調用 (RPC) 在客戶端和伺服器之間進行通訊。 如需在 RPC 伺服器存根中管理記憶體的詳細資訊,請參閱 伺服器存根記憶體管理 主題。