COM-Wrapper
COM unterscheidet sich vom .NET Framework-Objektmodell in einigen wichtigen Punkten:
Clients von COM-Objekten müssen die Lebensdauer dieser Objekte verwalten; Common Language Runtime verwaltet die Lebensdauer der Objekte in ihrer Umgebung.
Clients von COM-Objekten ermitteln die Verfügbarkeit eines Dienstes durch Anfrage bei einer Schnittstelle, die diesen Dienst bereitstellt. Daraufhin wird entweder ein Schnittstellenzeiger zurückgegeben oder nicht. Clients von .NET-Objekten können eine Beschreibung der Objektfunktionen durch Reflektion erhalten.
.NET-Objekte befinden sich in dem Speicher, der durch die .NET Framework-Ausführungsumgebung verwaltet wird. In der Ausführungsumgebung können Objekte aus Kapazitätsgründen innerhalb des Speichers bewegt und alle Verweise auf diese Objekte aktualisiert werden. Nicht verwaltete Clients, die einen Zeiger auf ein Objekt erhalten haben, gehen davon aus, dass das Objekt an derselben Position bleibt. Diesen Clients steht kein Mechanismus für den Umgang mit Objekten ohne festgelegte Position zur Verfügung.
Zur Bewältigung dieser Unterschiede stellt Common Language Runtime Wrapperklassen bereit, die verwalteten und nicht verwalteten Clients suggerieren, dass sie Objekte innerhalb ihrer jeweiligen Umgebung aufrufen. Bei jedem Aufruf einer Methode für ein COM-Objekt durch einen verwalteten Client wird von Common Language Runtime ein RCW (Runtime Callable Wrapper) erstellt. RCWs abstrahieren u. a. von den Unterschieden zwischen verwalteten und nicht verwalteten Verweismechanismen. Darüber hinaus wird von Common Language Runtime ein CCW (COM Callable Wrapper) zur Umkehrung des Prozesses erstellt, um einem COM-Client den nahtlosen Aufruf einer Methode für ein .NET-Objekt zu ermöglichen. Wie die folgende Abbildung zeigt, bestimmt die Perspektive des aufrufenden Codes, welche Wrapperklasse von Common Language Runtime erstellt wird.
Übersicht über COM-Wrapper
In den meisten Fällen bietet der durch Common Language Runtime generierte Standard-RCW oder Standard-CCW angemessenes Marshallen für Aufrufe, welche die Grenze zwischen COM und .NET Framework überschreiten. Unter Verwendung benutzerdefinierter Attribute können Sie optional festlegen, auf welche Weise verwalteter und nicht verwalteter Code durch Common Language Runtime repräsentiert wird.
Siehe auch
Aufgaben
Gewusst wie: Anpassen von durch die Laufzeit aufrufbaren Wrappern
Konzepte
Runtime Callable Wrapper (RCW)