Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
- Felügyelt objektum és natív proxy (például CCW) közötti hatékony leképezés.
- Hatékony leképezés a natív
IUnknownés a felügyelt proxy között (például RCW). - 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: .