Megosztás a következőn keresztül:


Futásidejű hívható burkoló

A közös nyelvi futtatókörnyezet a COM-objektumokat a futtatókörnyezet hívható burkolójának (RCW) nevezett proxyn keresztül teszi elérhetővé. Bár az RCW a .NET-ügyfelek szokásos objektumának tűnik, elsődleges funkciója a .NET-ügyfél és a COM-objektum közötti hívásokat irányítja.

A futtatókörnyezet minden COM-objektumhoz pontosan egy RCW-t hoz létre, függetlenül az objektumon található hivatkozások számától. A futtatókörnyezet folyamatonként egyetlen RCW-t tart fenn minden objektumhoz. Ha létrehoz egy RCW-t egy alkalmazástartományban vagy lakásban, majd egy másik alkalmazástartományra vagy lakásra mutató hivatkozást ad át, a rendszer proxyt használ az első objektumhoz. Vegye figyelembe, hogy ez a proxy egy új felügyelt objektum, és nem ugyanaz, mint a kezdeti RCW; Ez azt jelenti, hogy a két felügyelt objektum nem egyenlő, de ugyanazt a COM-objektumot jelöli. Az alábbi ábrán látható, hogy tetszőleges számú felügyelt ügyfél rendelkezhet hivatkozással a közzétett INew COM-objektumokra és INewer felületekre.

Az alábbi képen a COM-objektumok futásidejű hívható burkolón keresztüli elérésének folyamata látható:

Process for accessing COM objects through the RCW.

A típustárból származó metaadatok használatával a futtatókörnyezet létrehozza a meghívandó COM-objektumot és az objektum burkolóját is. Minden RCW fenntartja a csatolómutatók gyorsítótárát a körbefuttatva lévő COM-objektumon, és kiadja a hivatkozását a COM-objektumon, amikor már nincs szükség az RCW-ra. A futtatókörnyezet szemétgyűjtést végez az RCW-n.

A többi tevékenység mellett az RCW a burkolt objektum nevében rögzíti az adatokat a felügyelt és a nem felügyelt kód között. Az RCW pontosabban a metódusargumentumok és a metódusok visszatérési értékeinek rendezését biztosítja, amikor az ügyfél és a kiszolgáló eltérő módon jeleníti meg a közöttük átadott adatokat.

A standard burkoló beépített rendezési szabályokat kényszerít ki. Ha például egy .NET-ügyfél egy argumentum részeként ad át egy string típust egy nem felügyelt objektumnak, a burkoló típussá alakítja a string típust BSTR . Ha a COM-objektum visszaad egy értéket BSTR a felügyelt hívójának, a hívó kap egy string. Az ügyfél és a kiszolgáló is olyan adatokat küld és fogad, amelyek ismerősek számukra. Más típusok nem igényelnek átalakítást. Egy szabványos burkoló például a típus konvertálása nélkül mindig 4 bájtos egész számot ad át a felügyelt és a nem felügyelt kód között.

Kiválasztott felületek rendezése

A futtatókörnyezet hívható burkolójának (RCW) elsődleges célja, hogy elrejtse a felügyelt és a nem felügyelt programozási modellek közötti különbségeket. Zökkenőmentes átmenet létrehozásához az RCW a kiválasztott COM-felületeket anélkül használja fel, hogy azokat a .NET-ügyfélnek kitené, ahogy az alábbi ábrán is látható.

Az alábbi képen a COM-felületek és a futtatókörnyezet hívható burkolója látható:

Screenshot of the runtime callable wrapper with interfaces.

Ha korai kötött objektumként jön létre, az RCW egy adott típus. Implementálja azokat az interfészeket, amelyeket a COM-objektum implementál, és elérhetővé teszi az objektum felületeiről származó metódusokat, tulajdonságokat és eseményeket. Az ábrán az RCW elérhetővé teszi az INew felületet, de az IUnknown és az IDispatch interfészeket használja. Emellett az RCW az INew-felület minden tagját elérhetővé teszi a .NET-ügyfél számára.

Az RCW az alábbi táblázatban felsorolt interfészeket használja, amelyeket a körbefuttatandó objektum fed le.

Interfész Leírás
IDispatch Com-objektumokhoz való késői kötéshez tükröződés útján.
IErrorInfo Szöveges leírást ad a hibáról, a forrásáról, a súgófájlról, a súgókörnyezetről és a hibát definiáló felület GUID-járól (.NET-osztályok esetén mindig GUID_NULL ).
IProvideClassInfo Ha a burkolt COM-objektum implementálja az IProvideClassInfo-t, az RCW kinyeri a típusadatokat ebből a felületből, hogy jobb típusidentitást biztosítson.
IUnknown Objektumdentitás esetén írja be a kényszerítést és az élettartam-kezelést:

- Objektum identitása
A futtatókörnyezet az egyes objektumokhoz tartozó IUnknown felület értékének összehasonlításával különbözteti meg a COM-objektumokat.
- Írja be a kényszerítést
Az RCW felismeri a QueryInterface metódus által végrehajtott dinamikus típusfelderítést.
- Élettartam-kezelés
A QueryInterface metódussal az RCW lekéri és tárolja a nem felügyelt objektumra mutató hivatkozást, amíg a futtatókörnyezet nem végez szemétgyűjtést a burkolón, amely felszabadítja a nem felügyelt objektumot.

Az RCW opcionálisan az alábbi táblázatban felsorolt interfészeket használja, amelyeket a körbefuttatandó objektum fed le.

Interfész Leírás
I Csatlakozás ionPoint és I Csatlakozás ionPointContainer Az RCW delegáltalapú eseményekké alakítja a kapcsolati pont eseménystílusát elérhetővé tevő objektumokat.
IDispatchEx (csak .NET-keretrendszer) Ha az osztály implementálja az IDispatchEx-et, az RCW implementálja az IExpando-t. Az IDispatchEx interfész az IDispatch felület kiterjesztése, amely az IDispatch-sel ellentétben lehetővé teszi a tagok számbavételét, hozzáadását, törlését és kis- és nagybetűk megkülönböztetését.
IEnumVARIANT Lehetővé teszi az enumerálásokat támogató COM-típusok gyűjteményként való kezelését.

Lásd még