Reguły zarządzania pamięcią
Okres istnienia wskaźników do interfejsów jest zawsze zarządzany za pośrednictwem metod AddRef i Release w każdym interfejsie COM. Aby uzyskać więcej informacji, zobacz Rules for Managing Reference Counts (Reguły zarządzania liczbami odwołań).
W przypadku wszystkich innych parametrów ważne jest, aby przestrzegać pewnych reguł zarządzania pamięcią. Następujące reguły dotyczą wszystkich parametrów metod interfejsuâ €", w tym wartości zwracanej €", które nie są przekazywane przez wartość:
- Parametry w parametrach muszą być przydzielane i zwalniane przez obiekt wywołujący.
- Parametry wychodzące muszą być przydzielane przez parametr o nazwie ; są one zwalniane przez obiekt wywołujący przy użyciu standardowego alokatora pamięci zadań COM. Aby uzyskać więcej informacji, zobacz alokator pamięci OLE.
- Parametry in/out są początkowo przydzielane przez obiekt wywołujący, a następnie zwalniane i ponownie przydzielane przez wywołaną, jeśli to konieczne. Podobnie jak w przypadku parametrów out, obiekt wywołujący jest odpowiedzialny za zwolnienie ostatecznej zwróconej wartości. Należy użyć standardowego alokatora pamięci COM.
W dwóch ostatnich przypadkach, w których jeden fragment kodu przydziela pamięć, a inny fragment kodu go zwalnia, przy użyciu alokatora COM zapewnia, że dwa fragmenty kodu korzystają z tych samych metod alokacji.
Innym obszarem, który wymaga szczególnej uwagi, jest leczenie parametrów out i in-out w warunkach awarii. Jeśli funkcja zwraca kod błędu, obiekt wywołujący zwykle nie ma możliwości wyczyszczenia parametrów out lub in-out. Prowadzi to do następujących dodatkowych reguł:
- W przypadku warunku błędu parametry muszą być zawsze niezawodnie ustawione na wartość, która zostanie wyczyszczona bez żadnej akcji przez obiekt wywołujący.
- Wszystkie parametry wskaźnika muszą być jawnie ustawione na wartość null. Są one zwykle przekazywane w parametrze wskaźnika do wskaźnika, ale mogą być również przekazywane jako elementy członkowskie struktury przydzielanej przez obiekt wywołujący i wywoływane wypełnienia kodu. Najprostszym sposobem upewnienia się, że jest to (częściowo) ustawienie tych wartości na wartość null we wpisie funkcji. Ta reguła jest ważna, ponieważ promuje bardziej niezawodną współdziałanie aplikacji.
- W warunkach błędu wszystkie parametry wystające muszą być pozostawione samodzielnie przez kod o nazwie (w związku z czym pozostają na wartości, do której zostały zainicjowane przez obiekt wywołujący) lub być jawnie ustawione, jak w przypadku zwracania błędu parametru out.
Należy pamiętać, że te konwencje zarządzania pamięcią dla aplikacji COM mają zastosowanie tylko w interfejsach publicznych i interfejsach API; w ogóle nie ma potrzeby, aby alokacja pamięci była ściśle wewnętrzna dla aplikacji COM, należy wykonać przy użyciu tych mechanizmów.
Com wewnętrznie używa zdalnych wywołań procedur (RPC) do komunikacji między klientami i serwerami. Aby uzyskać więcej informacji na temat zarządzania pamięcią w wycinkach serwera RPC, zobacz temat Server-stub Memory Management.