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.
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 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ó:
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. |