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


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.