有時候方法會在堆積上配置記憶體緩衝區,並將緩衝區的位址傳回給呼叫端。 COM 定義一組函式,用於配置和釋放堆積上的記憶體。
- CoTaskMemAlloc 函式會配置記憶體區塊。
- CoTaskMemFree 函式會釋放一組記憶體區塊,該區塊會配置 CoTaskMemAlloc。
我們在 [開啟] 對話框範例中看到此模式的範例:
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
GetDisplayName 方法會配置字串的記憶體。 在內部,方法會呼叫 CoTaskMemAlloc 來配置字串。 當方法傳回時,pszFilePath 指向新緩衝區的記憶體位置。 呼叫者負責呼叫 coTaskMemFree 來釋放記憶體。
為什麼 COM 會定義自己的記憶體配置函式? 其中一個原因是在堆積配置器上提供抽象層。 否則,某些方法可能會呼叫 malloc,而其他方法則呼叫 新的。 然後,您的程式必須呼叫 免費 在某些情況下,並 刪除其他,並追蹤這一切很快就會變得不可能。 COM 配置函式會建立統一的方法。
另一個考慮是 COM 是 二進位 標準,因此它不會繫結至特定的程式設計語言。 因此,COM 無法依賴任何語言特定的記憶體配置形式。
下一個