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


Futási időben 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 bármennyi felügyelt ügyfél tarthat hivatkozást azokra a COM-objektumokra, amelyek a INew és INewer felületeket biztosítják.

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

A COM-objektumok RCW-n keresztüli elérésének folyamata.

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 az általa becsomagolt COM-objektumon, és felszabadítja a hivatkozást a COM-objektumon, amikor már nincs szükség az RCW-ra. A futtatókörnyezet szemétgyűjtést hajt végre 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 sorbarendezé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ó:

Képernyőkép a futtatókörnyezet hívható burkolójáról interfészekkel.

Ha korán kötött objektumként hozzák 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 az objektum, amelyet körülvesz, felfed.

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ásró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 (mindig GUID_NULL .NET-osztályok esetében).
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 Objektumazonosság, típus-kényszerítés és élettartam-kezelés esetén:

- 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 az objektum biztosít, amelyet körülvesz.

Interfész Leírás
IConnectionPoint és IConnectionPointContainer 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