Freigeben über


Speicherzuordnung in COM

Manchmal weist eine Methode einen Speicherpuffer für den Heap zu und gibt die Adresse des Puffers an den Aufrufer zurück. COM definiert ein Funktionspaar zum Zuweisen und Freigeben von Arbeitsspeicher auf dem Heap.

Wir haben ein Beispiel für dieses Muster im Dialogfeld "Öffnen":

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

Die GetDisplayName Methode weist Speicher für eine Zeichenfolge zu. Intern ruft die Methode CoTaskMemAlloc auf, um die Zeichenfolge zuzuweisen. Wenn die Methode zurückgegeben wird, verweist pszFilePath auf den Speicherspeicherort des neuen Puffers. Der Anrufer ist für das Aufrufen CoTaskMemFree verantwortlich, um den Speicher freizugeben.

Warum definiert COM eigene Speicherzuweisungsfunktionen? Ein Grund ist die Bereitstellung einer Abstraktionsebene über dem Heap-Allocator. Andernfalls rufen einige Methoden möglicherweise malloc auf, während andere neueaufgerufen haben. Dann müsste Ihr Programm kostenlosen in einigen Fällen aufrufen und in anderen löschen und alles nachverfolgen würde schnell unmöglich. Die COM-Zuordnungsfunktionen erstellen einen einheitlichen Ansatz.

Ein weiterer Aspekt ist die Tatsache, dass COM ein binärer Standard ist, sodass es nicht an eine bestimmte Programmiersprache gebunden ist. Daher kann COM keine sprachspezifische Form der Speicherzuweisung verwenden.

Nächster

COM-Codierungspraktiken