Freigeben über


COM-Wrapper

COM unterscheidet sich von dem .NET-Laufzeitobjektmodell auf mehrere wichtige Arten:

  • Clients von COM-Objekten müssen die Lebensdauer dieser Objekte verwalten; Die Common Language Runtime verwaltet die Lebensdauer von Objekten in ihrer Umgebung.

  • Clients von COM-Objekten ermitteln, ob ein Dienst verfügbar ist, indem eine Schnittstelle angefordert wird, die diesen Dienst bereitstellt und einen Schnittstellenzeiger zurückgibt oder nicht. Clients von .NET-Objekten können mithilfe von Spiegelung eine Beschreibung der Funktionalität eines Objekts abrufen.

  • NET-Objekte befinden sich im Speicher, der von der .NET-Laufzeitausführungsumgebung verwaltet wird. Die Ausführungsumgebung kann Objekte aus Leistungsgründen im Arbeitsspeicher verschieben und alle Verweise auf die von ihr verschobenen Objekte aktualisieren. Nicht verwaltete Clients, die einen Zeiger auf ein Objekt erhalten haben, verlassen sich darauf, dass das Objekt an derselben Position bleibt. Diese Clients haben keinen Mechanismus für den Umgang mit einem Objekt, dessen Ort nicht fest ist.

Um diese Unterschiede zu überwinden, stellt die Runtime Wrapper-Klassen bereit, damit sowohl verwaltete als auch nicht verwaltete Clients den Eindruck haben, dass sie Objekte in ihrer jeweiligen Umgebung aufrufen. Wenn Ihr verwalteter Client eine Methode für ein COM-Objekt aufruft, erstellt die Laufzeit einen Runtime Callable Wrapper (RCW). RCWs abstrahieren unter anderem die Unterschiede zwischen verwalteten und nicht verwalteten Referenzmechanismen. Die Laufzeit erstellt auch einen COM-aufrufbaren Wrapper (CCW), um den Prozess umzukehren, sodass ein COM-Client eine Methode für ein .NET-Objekt nahtlos aufrufen kann. Wie in der folgenden Abbildung gezeigt, bestimmt die Perspektive des aufrufenden Codes die Wrapperklasse, die die Common Language Runtime erstellt.

ÜBERSICHT ÜBER COM-Wrapper

In den meisten Fällen stellen die von der Common Language Runtime standardmäßig generierten RCW oder CCW ausreichend Marshalling für Aufrufe bereit, die die Anwendungsgrenze zwischen COM und der .NET Runtime überschreiten. Mit benutzerdefinierten Attributen können Sie optional die Art und Weise anpassen, wie die Laufzeit verwalteten und nicht verwalteten Code darstellt.

Siehe auch