COM 中的記憶體配置

有時候,方法會在堆積上配置記憶體緩衝區,並將緩衝區的位址傳回給呼叫端。 COM 會定義一組函式,以配置和釋放堆積上的記憶體。

我們在 [ 開啟] 對話方塊範例中看到此模式的範例:

PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
    // ...
    CoTaskMemFree(pszFilePath);
}

GetDisplayName方法會配置字串的記憶體。 在內部,方法會呼叫 CoTaskMemAlloc 來配置字串。 當方法傳回時, pszFilePath 會指向新緩衝區的記憶體位置。 呼叫端負責呼叫 CoTaskMemFree 以釋放記憶體。

為什麼 COM 會定義自己的記憶體配置函式? 其中一個原因是在堆積配置器上提供抽象層。 否則,有些方法可能會呼叫 malloc ,而其他方法則會呼叫 new。 然後,您的程式在某些情況下需要 免費 呼叫,並在其他情況下 刪除 ,並隨時追蹤它很快就會變得不可能。 COM 配置函式會建立統一的方法。

另一個考慮是 COM 是 二進位 標準,因此不會系結至特定程式設計語言。 因此,COM 無法依賴任何語言特定的記憶體配置形式。

下一個

COM 程式碼撰寫做法