共用方式為


使用 Interop 封送處理器的記憶體管理

更新:2007 年 11 月

Interop 封送處理器會不斷嘗試釋放由 Unmanaged 程式碼配置的記憶體。這個行為使用 COM 記憶體管理規則編譯,但和管理原生 C++ 的規則不同。

當使用平台叫用 (自動釋放指標的記憶體) 時,若您預期原生 C++ 行為 (未釋放記憶體) 將會發生混淆。例如,從 C++ DLL 呼叫下列 Unmanage 方法並不會自動釋放任何記憶體。

Unmanaged 簽章

BSTR MethodOne (BSTR b) {
     return b;
}

然而,如果您將方法定義成平台叫用原型 (Prototype),將每個 BSTR 型別以 String 型別取代,並呼叫 MethodOne,Common Language Runtime 會嘗試釋放 b 兩次。您可以使用 IntPtr 型別 (而非 String 型別) 變更封送處理行為。

Runtime 永遠使用 CoTaskMemFree 方法來釋放記憶體。如果您正在使用的記憶體不是使用 CoTaskMemAlloc 方法配置,您必須使用 IntPtr,並用適當方法手動釋放記憶體。同樣地,您可在決不能釋放記憶體的情況下避免自動釋放記憶體,例如,從 Kernel32.dll 使用 GetCommandLine 函式,它會傳回指標到核心記憶體。如需手動釋放記憶體的詳細資訊,請參閱緩衝區範例

請參閱

概念

方向屬性

Blittable 和非 Blittable 型別

複製和 Pin

其他資源

預設的封送處理行為