System.Runtime.InteropServices.ComWrappers osztály

Megjegyzés:

Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.

Az ComWrappers API a IUnknown beépített COM együttműködési támogatástól függetlenül nyújt támogatást az API számára. Az ComWrappers API elérhetővé teszi a minimális futásidejű támogatást, amelyre a fejlesztőknek szükségük van a beépített verzió hatékony cseréjéhez.

Hagyományosan a futásidejű környezetben a felügyelt objektumokhoz tartozó natív proxyt COM Callable Wrappernek (CCW), míg a natív objektumhoz tartozó felügyelt proxyt Runtime Callable Wrappernek (RCW) nevezzük. Az itt használt kifejezések azonban nem tévesztendők össze az azonos nevű beépített funkciókkal (azaz CCW és RCW). A beépített funkciókkal ellentétben a pontos élettartam-kezelés, a küldési módszerek, valamint az argumentumok és a visszatérési értékek rendezése a végrehajtóra ComWrappers hárul.

A minimális támogatást a következő funkciók határozzák meg:

  1. Felügyelt objektum és natív proxy (például CCW) közötti hatékony leképezés.
  2. Hatékony leképezés a natív IUnknown és a felügyelt proxy között (például RCW).
  3. Integráció a szemétgyűjtővel az IReferenceTrackerHost interfészszerződésen keresztül.

Ennek kihasználása egy fejlett forgatókönyv.

Proxyállapot

Ez a szakasz a natív és felügyelt proxyállapot leírását és illusztrációit tartalmazza a létrehozásuk után.

Az alábbi ábrákon az erős hivatkozás szilárd vonalként (===) és gyenge hivatkozásként van ábrázolva szaggatott vonalként (= = =). Az "erős hivatkozás" és a "gyenge hivatkozás" kifejezéseket "élettartam meghosszabbítása" és "élettartam nem meghosszabbítása" kifejezésként kell értelmezni, szemben egy konkrét megvalósítást sugalló értelemmel.

Az alábbi ábrán a felügyelt objektum és a natív proxy állapota látható a hívás ComWrappers.GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags)után.

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

A következő ábrán a natív objektum és a felügyelt proxy állapota látható a hívás ComWrappers.GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags)után. Az "identitás" fogalma a IUnknown szabályait követi.

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

Figyelje meg, hogy a futási perspektíva szempontjából csak gyenge hivatkozások léteznek. A +1 natív objektum referenciaszámáról feltételezik, hogy azt a felügyelt proxy létrehozója, valamint a ComWrappers implementátor végzi el, hogy biztosítsa és fenntartsa a natív objektum és a felügyelt proxy közötti társított élettartamot. A felügyelt proxyban szerepel egy opcionális erős hivatkozás (azaz AddRef()) is, amely a korábban említett forgatókönyv (3) támogatására szolgál. Lásd a(z) CreateObjectFlags.TrackerObject. Ezzel az opcionális erős hivatkozással a referenciaszám a következő lenne +2: .