Memóriakezelési szabályok
A felületekre mutató mutatók élettartama mindig az AddRef és Release metódusokkal kezelhető minden COM-felületen. További információ: Hivatkozási számok kezelésére vonatkozó szabályok.
Minden más paraméter esetében fontos, hogy betartsa a memória kezelésére vonatkozó bizonyos szabályokat. Az alábbi szabályok a felületi metódusok minden paraméterére vonatkoznak, beleértve a visszatérési értéket is, amely nem érték szerint van átadva:
- A paramétereket a hívónak kell lefoglalnia és felszabadítania.
- A kimenő paramétereket a hívottnak kell lefoglalnia; a hívó felszabadítja őket a szabványos COM feladatmemória-kiosztó használatával. További információt az Az OLE memóriaelosztó című témakörben talál.
- Az in/out paramétereket kezdetben a hívó foglalja le, majd szükség esetén felszabadítja és újratelepíti a hívott paramétert. Ahogy az out paraméterek esetében is igaz, a hívó felelős a végső visszaadott érték felszabadításáért. A szabványos COM memóriaelosztót kell használni.
Az utóbbi két esetben, amikor egy kód egy része lefoglalja a memóriát, és egy másik kód felszabadítja azt, a COM-kiosztó használatával biztosítja, hogy a két kód ugyanazon foglalási módszereket használja.
Egy másik, különös figyelmet igénylő terület a ki- és a ki-ki paraméterek kezelése meghibásodási körülmények között. Ha egy függvény hibakódot ad vissza, a hívó általában nem tudja megtisztítani a ki- vagy a kifelé irányuló paramétereket. Ez a következő további szabályokhoz vezet:
- Hibaállapot esetén a paramétereket mindig megbízhatóan kell beállítani olyan értékre, amelyet a hívó beavatkozás nélkül töröl.
- Az összes mutatóparamétert explicit módon kell beállítani a NULL . Ezek általában egy mutató–mutató paraméterben vannak átadva, de a hívó által lefoglalt struktúra tagjaiként és az úgynevezett kód kitöltéseként is átadhatók. A legegyszerűbb módja annak, hogy ez (részben) úgy legyen beállítva, hogy ezek az értékek NULL függvénybejegyzésen. Ez a szabály azért fontos, mert elősegíti az alkalmazások robusztusabb együttműködését.
- Hibafeltételek esetén az összes kimenő paramétert a hívott kódnak egyedül kell hagynia (így a hívó által inicializált értéken kell maradnia), vagy explicit módon be kell állítania, mint a kimenő paraméter hibavisszajelzési esetében.
Ne feledje, hogy a COM-alkalmazások memóriakezelési konvenciói csak a nyilvános felületekre és API-kra vonatkoznak; Egyáltalán nem követelmény, hogy a COM-alkalmazásokban szigorúan belső memóriafoglalást kell végezni ezen mechanizmusok használatával.
A COM belsőleg távoli eljáráshívásokat (RPC) használ az ügyfelek és kiszolgálók közötti kommunikációhoz. A memória RPC-kiszolgálócsomókban való kezeléséről további információt a Kiszolgálói memóriakezelés című témakörben talál.
Kapcsolódó témakörök
- memóriafoglalási kezelése