System.Runtime.InteropServices.ComWrappers-Klasse

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Die ComWrappers API bietet Unterstützung für die IUnknown API unabhängig von der integrierten COM-Interoperabilitätsunterstützung. Die ComWrappers API macht die minimale Laufzeitunterstützung verfügbar, die für Entwickler erforderlich ist, um die integrierte Version effizient zu ersetzen.

In der Laufzeit wird ein systemeigener Proxy für verwaltetes Objekt als COM Callable Wrapper (CCW) bezeichnet, und ein verwalteter Proxy für ein systemeigenes Objekt wird als Runtime Callable Wrapper (RCW) bezeichnet. Wenn diese Begriffe hier verwendet werden, sollten diese Begriffe jedoch nicht mit den integrierten Features desselben Namens (d . b. CCW und RCW) verwechselt werden. Im Gegensatz zu den integrierten Features bleibt der Implementierung eine Mehrheit der Verantwortung für die genaue Verwaltung der Lebensdauer, die Verteilermethoden und das Marshalling von Argumenten und Rückgabewerten überlassen ComWrappers .

"Minimale Unterstützung" wird durch die folgenden Features definiert:

  1. Effiziente Zuordnung zwischen einem verwalteten Objekt und einem systemeigenen Proxy (z. B. CCW).
  2. Effiziente Zuordnung zwischen einem systemeigenen IUnknown und seinem verwalteten Proxy (z. B. RCW).
  3. Integration mit dem Garbage Collector über den IReferenceTrackerHost-Schnittstellenvertrag .

Dies ist ein erweitertes Szenario.

Proxystatus

Dieser Abschnitt enthält Beschreibungen und Abbildungen des systemeigenen und verwalteten Proxystatus nach der jeweiligen Erstellung.

In den folgenden Abbildungen wird ein starker Bezug als einfarbige Linie (===) dargestellt, und ein schwacher Bezug wird als gestrichelte Linie (= = =) dargestellt. Die Begriffe "starker Bezug" und "schwacher Bezug" sollten als "Verlängern der Lebensdauer" und "nicht verlängerte Lebensdauer" interpretiert werden, im Gegensatz zu einer bestimmten Implementierung.

Die folgende Abbildung zeigt den Status des verwalteten Objekts und des systemeigenen Proxys nach einem Aufruf von ComWrappers.GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags).

 --------------------                  ----------------------
|   Managed object   |                |     Native proxy     |
|                    |                | Ref count: 1         |
|  ----------------  |                |  ------------------  |
| | Weak reference |=| = = = = = = = >| | Strong reference | |
| |    to proxy    | |<===============|=|    to object     | |
|  ----------------  |                |  ------------------  |
 --------------------                  ----------------------

Die nächste Abbildung zeigt den Status des systemeigenen Objekts und des verwalteten Proxys nach einem Aufruf von ComWrappers.GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags). Das Konzept der "Identität" folgt den Regeln für IUnknown.

 ------------------               ------------------
|  Native object   |< = = = = = =|                  |
| Ref count: +1    |             | Mapping from     |
 ------------------              | native identity  |
 ------------------------        | to managed proxy |
|   Managed proxy        |< = = =|                  |
| Created by ComWrappers |        ------------------
|   implementer.        |
| Optional AddRef() on   |
|   native object.      |
 ------------------------

Beachten Sie, dass nur schwache Verweise aus Laufzeitperspektive vorhanden sind. Die +1 Verweisanzahl für das systemeigene Objekt wird davon ausgegangen, dass sie vom verwalteten Proxyersteller (d. h. dem ComWrappers Implementierer) ausgeführt wird, um die zugeordnete Lebensdauer zwischen dem systemeigenen Objekt und seinem verwalteten Proxy sicherzustellen. Es gibt einen optionalen starken Verweis (dAddRef(). h. ) Erwähnung im verwalteten Proxy, der verwendet wird, um szenario (3) Erwähnung früher zu unterstützen. Siehe CreateObjectFlags.TrackerObject. Bei diesem optionalen starken Verweis wäre +2die Referenzanzahl .