Dela via


Regler för minneshantering

Livslängden för pekare till gränssnitt hanteras alltid via metoderna AddRef och Release på varje COM-gränssnitt. Mer information finns i Regler för att hantera referensantal.

För alla andra parametrar är det viktigt att följa vissa regler för hantering av minne. Följande regler gäller för alla parametrar för gränssnittsmetoderâ € "inklusive returvärdetâ € "som inte skickas av värdet:

  • In-parameters måste allokeras och frigöras av anroparen.
  • Utparametrar måste allokeras av den som anropas. de frigörs av anroparen med hjälp av com-standardåtgärdens minnesallokering. Mer information finns i FÖR OLE-minnesallokering.
  • In-/utparametrar allokeras först av anroparen och frigörs och omallokeras sedan av den som anropas om det behövs. Som gäller för out-parametrar ansvarar anroparen för att frigöra det slutliga returnerade värdet. Standard-COM-minnesallokatorn måste användas.

I de två senare fallen, där en koddel allokerar minnet och en annan kod frigör det, säkerställer com-allokeraren att de två koddelarna använder samma allokeringsmetoder.

Ett annat område som behöver särskild uppmärksamhet är behandling av ut- och in-out-parametrar i feltillstånd. Om en funktion returnerar en felkod kan anroparen vanligtvis inte rensa ut- eller in-out-parametrarna. Detta leder till följande ytterligare regler:

  • Om ett feltillstånd uppstår måste parametrar alltid vara tillförlitligt inställda på ett värde som rensas utan någon åtgärd av anroparen.
  • Alla parametrar för utpekare måste uttryckligen anges till NULL-. Dessa skickas vanligtvis i en pekar-till-pekare-parameter men kan också skickas som medlemmar i en struktur som anroparen allokerar och som kallas kodfyllningar. Det enklaste sättet att se till att detta (delvis) är att ange dessa värden till NULL- vid funktionsposten. Den här regeln är viktig eftersom den främjar mer robust programkompatibilitet.
  • Under felförhållanden måste alla in-out-parametrar antingen lämnas ensamma av koden som anropas (och därmed ligga kvar på det värde som anroparen initierade) eller anges uttryckligen, som i returfallet för out-parameterfelet.

Kom ihåg att dessa minneshanteringskonventioner för COM-program endast gäller för offentliga gränssnitt och API:er. det finns inget krav alls att minnesallokering strikt internt till ett COM-program behöver göras med hjälp av dessa mekanismer.

COM använder internt RPC (Remote Procedure Calls) för att kommunicera mellan klienter och servrar. Mer information om hur du hanterar minne i RPC-serverstubbar finns i avsnittet Server-stub Memory Management.