次の方法で共有


COM でのメモリ割り当て

メソッドがヒープにメモリ バッファーを割り当て、バッファーのアドレスを呼び出し元に返す場合があります。 COM は、ヒープ上のメモリを割り当てて解放するための関数のペアを定義します。

このパターンの例は、[開く] ダイアログ ボックスの例で確認しました。

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

GetDisplayName メソッドは、文字列のメモリを割り当てます。 内部的には、メソッドは CoTaskMemAlloc呼び出して文字列を割り当てます。 メソッドから制御が戻ると、pszFilePath は、新しいバッファーのメモリ位置を指します。 呼び出し元は、CoTaskMemFree を呼び出してメモリを解放する役割を担います。

COM が独自のメモリ割り当て関数を定義する理由 1 つの理由は、ヒープ アロケーターに抽象化レイヤーを提供することです。 それ以外の場合は、malloc を呼び出すメソッドもあれば、新しい 呼び出すメソッドもあります。 その後、あなたのプログラムは、場合によっては 無料の を呼び出し、他の を削除 必要があり、それを追跡することはすぐに不可能になります。 COM 割り当て関数は、統一されたアプローチを作成します。

もう 1 つの考慮事項は、COM が バイナリ 標準であるため、特定のプログラミング言語に関連付けられていないという事実です。 そのため、COM は言語固有の形式のメモリ割り当てに依存できません。

次に

COM コーディングプラクティス