Speicherverwaltungsregeln
Die Lebensdauer von Zeigern auf Schnittstellen wird immer über die AddRef- und Release-Methoden auf jeder COM-Schnittstelle verwaltet. Weitere Informationen finden Sie unter Regeln zum Verwalten der Verweisanzahl.
Für alle anderen Parameter ist es wichtig, bestimmte Regeln für die Verwaltung des Arbeitsspeichers einzuhalten. Die folgenden Regeln gelten für alle Parameter von Schnittstellenmethoden, einschließlich des Rückgabewerts, die nicht als Wert übergeben werden:
- In-Parameter müssen vom Aufrufer zugeordnet und frei werden.
- Out-Parameter müssen durch den aufgerufenen zugeordnet werden. sie werden vom Aufrufer mithilfe der standardmäßigen COM-Aufgabenspeicherzuweisung frei. Weitere Informationen finden Sie unter Ole-Speicherzuweisung.
- In-/out-Parameter werden anfänglich vom Aufrufer zugeordnet und dann bei Bedarf durch den aufgerufenen Parameter frei und neu zugeordnet. Wie bei out-Parametern ist der Aufrufer dafür verantwortlich, den endgültigen zurückgegebenen Wert frei zu geben. Die STANDARDMÄßIGE COM-Speicherzuweisung muss verwendet werden.
In den letzten beiden Fällen, in denen ein Codeteil den Arbeitsspeicher zuordnt und ein anderer Codeteil ihn freigibt, stellt die Verwendung der COM-Zuweisung sicher, dass die beiden Codeteile die gleichen Zuordnungsmethoden verwenden.
Ein weiterer Bereich, der besondere Aufmerksamkeit erfordert, ist die Behandlung von out- und in-out-Parametern in Fehlerbedingungen. Wenn eine Funktion einen Fehlercode zurückgibt, hat der Aufrufer in der Regel keine Möglichkeit, die Out- oder In-Out-Parameter zu bereinign. Dies führt zu den folgenden zusätzlichen Regeln:
- Bei einem Fehlerzustand müssen Parameter immer zuverlässig auf einen Wert festgelegt werden, der ohne Aktion des Aufrufers bereinigt wird.
- Alle Out-Zeigerparameter müssen explizit auf NULL festgelegt werden. Diese werden in der Regel in einem Zeiger-zu-Zeiger-Parameter übergeben, können aber auch als Member einer Struktur übergeben werden, die der Aufrufer zuteilen und den aufgerufenen Code füllt. Die unkomplizierteste Möglichkeit, sicherzustellen, dass dies (teilweise) ist, diese Werte beim Funktionseintrag auf NULL zu setzen. Diese Regel ist wichtig, da sie eine stabilere Anwendungsinteroperabilität fördert.
- Unter Fehlerbedingungen müssen alle in-out-Parameter entweder durch den aufgerufenen Code allein gelassen werden (also bei dem Wert, mit dem sie vom Aufrufer initialisiert wurden) oder explizit festgelegt werden, wie im Fehlerfall des out-Parameters.
Denken Sie daran, dass diese Speicherverwaltungskonventionen für COM-Anwendungen nur für öffentliche Schnittstellen und APIs gelten. "Es ist überhaupt nicht erforderlich, dass die Ausschließliche interne Speicherzuweisung für eine COM-Anwendung mithilfe dieser Mechanismen erfolgen muss.
COM verwendet intern Remoteprozeduraufrufe (RPC) für die Kommunikation zwischen Clients und Servern. Weitere Informationen zum Verwalten von Arbeitsspeicher in RPC-Serverstubs finden Sie im Thema Speicherverwaltung für Serverstubs.