Runtime Callable Wrapper (RCW)

Common Language Runtime macht COM-Objekte über einen Proxy verfügbar, der RCW (Runtime Callable Wrapper, Aufrufwrapper der Common Language Runtime) genannt wird. Obwohl .NET-Clients einen RCW als normales Objekt betrachten, besteht seine primäre Funktion im Marshallen von Aufrufen zwischen einem .NET-Client und einem COM-Objekt.

Common Language Runtime erstellt genau einen RCW für jedes COM-Objekt, unabhängig von der Anzahl der vorhandenen Verweise auf das Objekt. Die Common Language Runtime verwaltet für jedes Objekt einen einzelnen RCW pro Prozess. Wenn Sie einen RCW in einer Anwendungsdomäne oder einem Apartment erstellen und anschließend einen Verweis an eine andere Anwendungsdomäne oder ein anderes Apartment übergeben, wird ein Proxy für das erste Objekt verwendet. Wie die folgende Abbildung zeigt, kann eine beliebige Anzahl verwalteter Clients auf die COM-Objekte verweisen, welche die Schnittstellen INew und INewer verfügbar machen.

Zugriff auf COM-Objekte über den RCW

RCW

Unter Verwendung von Metadaten, die aus einer Typbibliothek stammen, erstellt Common Language Runtime für das Objekt sowohl das aufzurufende COM-Objekt als auch einen Wrapper. Jeder RCW verwaltet einen Cache von Schnittstellenzeigern auf das umschlossene COM-Objekt. Ist der RCW nicht länger erforderlich, wird der jeweilige Verweis auf das COM-Objekt freigegeben. Common Language Runtime führt eine Garbage Collection für den RCW durch.

Unter anderem marshallt der RCW für das umschlossene Objekt Daten zwischen verwaltetem und nicht verwaltetem Code. Insbesondere marshallt der RCW Argumente von Methoden und die von Methoden zurückgegebenen Werte, wenn Client und Server die untereinander ausgetauschten Daten unterschiedlich repräsentieren.

Der Standardwrapper erzwingt integrierte Marshallregeln. Ein Beispiel: Wenn ein .NET-Client einen Zeichenfolgetyp als Teil eines Arguments an ein nicht verwaltetes Objekt übergibt, konvertiert der Wrapper die Zeichenfolge in einen BSTR-Typ. Gibt das COM-Objekt seinem verwalteten Aufrufer einen BSTR zurück, erhält der Aufrufer eine Zeichenfolge. Sowohl Client als auch Server senden und empfangen auf diese Weise Daten, die ihnen jeweils vertraut sind. Andere Typen erfordern keine Konvertierung. Ein Standardwrapper wird z. B. eine ganze Zahl von 4 Byte zwischen verwaltetem und nicht verwaltetem Code immer ohne Typkonvertierung übertragen.

Siehe auch

Konzepte

COM-Wrapper

Marshallen von ausgewählten Schnittstellen

COM Callable Wrapper (CCW)

Importieren einer Typbibliothek als Assembly

Weitere Ressourcen

Zusammenfassung: Konvertieren einer Typbibliothek in eine Assembly