Freigeben über


Speicherbelegung in COM

Manchmal weist eine Methode einen Speicherpuffer auf dem 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.

Ein Beispiel für dieses Muster wurde im Dialogfeld Öffnen gezeigt:

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

Die GetDisplayName-Methode ordnet Arbeitsspeicher für eine Zeichenfolge zu. Intern ruft die Methode CoTaskMemAlloc auf, um die Zeichenfolge zuzuordnen. Wenn die Methode zurückgibt, verweist pszFilePath auf den Speicherort des neuen Puffers. Der Aufrufer ist für den Aufruf von CoTaskMemFree verantwortlich, um den Arbeitsspeicher freizugeben.

Warum definiert COM eigene Speicherbelegungsfunktionen? Ein Grund ist die Bereitstellung einer Abstraktionsebene über der Heapzuteilung. Andernfalls rufen einige Methoden möglicherweise malloc auf, während andere als new bezeichnet werden. Dann müsste Ihr Programm in einigen Fällen kostenlos aufrufen und in anderen löschen , und es wäre schnell unmöglich, alles nachzuverfolgen. Die COM-Zuordnungsfunktionen erstellen einen einheitlichen Ansatz.

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

Nächste

COM-Codierungsmethoden