Regeln für die Speicherverwaltung

Die Lebensdauer von Verweisen auf Schnittstellen wird in jeder COM-Schnittstelle immer über die Methoden AddRef und Release verwaltet. Weitere Informationen finden Sie unter Regeln für die Verwaltung der Verweisanzahl.

Für alle anderen Parameter ist es wichtig, bestimmte Regeln für die Speicherverwaltung einzuhalten. Die folgenden Regeln gelten für alle Parameter von Schnittstellenmethoden, einschließlich des Rückgabewerts, die nicht nach dem Wert übergeben werden:

  • In-Parameter müssen vom Aufrufer zugewiesen und freigegeben werden.
  • Out-Parameter müssen von der aufgerufenen Methode zugewiesen werden. Sie werden vom Aufrufer mithilfe der Standardspeicherzuordnung für COM-Aufgaben freigegeben. Weitere Informationen finden Sie unter OLE-Speicherzuordnung.
  • In-/Out-Parameter werden zunächst vom Aufrufer zugeordnet und anschließend bei Bedarf durch die aufgerufene Methode freigegeben und neu zugeordnet. Wie bei Out-Parametern ist der Aufrufer dafür verantwortlich, den endgültigen zurückgegebenen Wert freizugeben. Die Standardspeicherzuordnung für COM muss verwendet werden.

In den letzten beiden Fällen wird durch die Verwendung der COM-Zuweisung gewährleistet, dass die beiden Teile des Codes dieselben Zuordnungsmethoden verwenden, wenn ein Teil des Codes den Speicher zuordnet und ein anderer den Speicher freigibt.

Ein weiterer Bereich, der besondere Aufmerksamkeit erfordert, ist die Behandlung von Out- und In-Out-Parametern bei Ausfallbedingungen. Wenn eine Funktion einen Fehlercode zurückgibt, hat der Aufrufer in der Regel keine Möglichkeit, die Out- oder In-Out-Parameter zu bereinigen. Daraus ergeben sich die folgenden zusätzlichen Regeln:

  • Bei einer Fehlerbedingung müssen Parameter immer zuverlässig auf einen Wert festgelegt werden, der ohne Aktion durch den Aufrufer bereinigt wird.
  • Alle Out-Verweisparameter müssen explizit auf NULL festgelegt werden. Diese werden in der Regel in einem Verweis-auf-Verweis-Parameter übergeben, können jedoch ebenfalls als Member einer Struktur übergeben werden, die vom Aufrufer zuordnet und vom aufgerufenen Code gefüllt wird. Die einfachste Möglichkeit, das zu gewährleisten, besteht zum Teil darin, diese Werte beim Funktionsstart auf NULL festzulegen. Diese Regel ist wichtig, da sie eine stabilere Anwendungsinteroperabilität unterstützt.
  • Unter Fehlerbedingungen müssen alle In-Out-Parameter durch den aufgerufenen Code und damit noch am Wert verbleiben, auf den sie vom Aufrufer initialisiert wurden, oder wie bei der Fehlerrückgabe des Out-Parameters explizit festgelegt werden.

Beachten Sie, dass diese Speicherverwaltungskonventionen für COM-Anwendungen lediglich für öffentliche Schnittstellen und APIs gelten. Die ausschließlich interne Speicherbelegung muss nicht über diese Mechanismen erfolgen.

COM verwendet intern Remoteprozeduraufrufe (Remote Procedure Call, RPC) für die Kommunikation zwischen Clients und Servern. Weitere Informationen zur Speicherverwaltung in RPC-Server-Stubs finden Sie im Artikel Server-Stub-Speicherverwaltung.