Megosztás a következőn keresztül:


Memóriafoglalás a COM-ban

Néha egy metódus lefoglal egy memóriapuffert a halomra, és visszaadja a puffer címét a hívónak. A COM függvénypárokat határoz meg a halom memória kiosztásához és felszabadításához.

Erre a mintára láthattunk példát a Megnyitás párbeszédpanelen,:

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

A GetDisplayName metódus lefoglalja a sztring memóriáját. A metódus belsőleg meghívja CoTaskMemAlloc a sztring lefoglalásához. Amikor a metódus visszatér, pszFilePath az új puffer memóriahelyére mutat. A hívó felelős CoTaskMemFree hívásáért a memória felszabadítása érdekében.

Miért határozza meg a COM a saját memóriafoglalási függvényeit? Ennek egyik oka egy absztrakciós réteg biztosítása a halomelosztó felett. Ellenkező esetben előfordulhat, hogy egyes metódusok malloc, míg mások újhívnak. Ezután a programnak bizonyos esetekben fel kell hívnia ingyenes, és törölnie máshol, és az összes nyomon követése gyorsan lehetetlenné válik. A COM-elosztási függvények egységes megközelítést hoznak létre.

Egy másik szempont az, hogy a COM egy bináris szabvány, így nem kötődik egy adott programozási nyelvhez. Ezért a COM nem támaszkodhat a memóriafoglalás nyelvspecifikus formájára.

Következő

COM kódolási eljárásainak