Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
- A CoTaskMemAlloc függvény memóriablokkot foglal le.
- A CoTaskMemFree függvény felszabadít egy memóriablokkot, amelyet CoTaskMemAllocfoglalt le.
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ő