Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Środowisko uruchomieniowe języka wspólnego uwidacznia obiekty COM za pomocą proxy nazywanego opakowaniem wywoływanym przez środowisko uruchomieniowe (RCW). Chociaż RCW wydaje się być zwykłym obiektem dla klientów .NET, jego podstawową funkcją jest przekazywanie wywołań między klientem .NET a obiektem COM.
Środowisko uruchomieniowe tworzy dokładnie jedną RCW dla każdego obiektu COM, niezależnie od liczby odwołań, które istnieją w tym obiekcie. Środowisko uruchomieniowe utrzymuje jeden RCW na proces dla każdego obiektu. Jeśli tworzysz RCW w jednej domenie aplikacji lub apartamencie, a następnie przekazujesz odwołanie do innej domeny aplikacji lub apartamentu, użyty zostanie obiekt zastępczy dla pierwotnego obiektu. Należy pamiętać, że ten serwer proxy jest nowym obiektem zarządzanym, a nie tym samym co początkowy RCW; Oznacza to, że dwa zarządzane obiekty nie są równe, ale reprezentują ten sam obiekt COM. Jak pokazano na poniższej ilustracji, dowolna liczba zarządzanych klientów może przechowywać odwołanie do obiektów COM, które udostępniają interfejsy INew i INewer.
Na poniższej ilustracji przedstawiono proces uzyskiwania dostępu do obiektów COM za pośrednictwem otoki wywoływanej przez środowisko uruchomieniowe:
Przy użyciu metadanych pochodzących z biblioteki typów środowisko uruchomieniowe tworzy wywoływany obiekt COM i otokę dla tego obiektu. Każdy RCW przechowuje pamięć podręczną wskaźników interfejsów dla obiektu COM, który opakowuje, i zwalnia odwołanie do obiektu COM, gdy RCW nie jest już potrzebny. Środowisko uruchomieniowe wykonuje odzyskiwanie pamięci w wersji RCW.
RCW, między innymi, przekazuje dane między kodem zarządzanym a niezarządzanym w imieniu opakowanego obiektu. W szczególności RCW zapewnia marshaling dla argumentów metody i zwracanych wartości metody za każdym razem, gdy klient i serwer mają różne reprezentacje danych przekazywanych między nimi.
Standardowe opakowanie wymusza wbudowane zasady przetwarzania danych. Na przykład gdy klient platformy .NET przekazuje string typ jako argument do niezarządzanego obiektu, opakowanie konwertuje string na BSTR typ. Jeśli obiekt COM zwróci obiekt BSTR do zarządzanego wywołującego, wywołujący otrzyma obiekt string. Zarówno klient, jak i serwer wysyłają i odbierają znane im dane. Inne typy nie wymagają konwersji. Na przykład standardowe opakowanie będzie zawsze przekazywać 4-bajtową liczbę całkowitą między zarządzanym oraz niezarządzanym kodem bez konwertowania typu.
Organizacja interfejsów wybranych
Głównym celem otoki wywoływalnej w czasie wykonywania (RCW) jest ukrycie różnic między modelami programowania zarządzanymi i niezarządzanymi. Aby stworzyć bezproblemowe przejście, RCW konsumuje wybrane interfejsy COM, bez udostępniania ich klientowi platformy .NET, jak pokazano na poniższej ilustracji.
Na poniższym obrazku przedstawiono interfejsy COM i opakowanie wywoływane przez środowisko uruchomieniowe.
Po utworzeniu jako obiekt wiązany wcześnie, RCW jest określonym typem. Implementuje interfejsy, które implementuje obiekt COM, oraz uwidacznia metody, właściwości i zdarzenia z interfejsów tego obiektu. Na ilustracji RCW uwidacznia interfejs INew, ale korzysta z interfejsów IUnknown i IDispatch . Ponadto RCW uwidacznia wszystkich członków interfejsu INew dla klienta platformy .NET.
RcW korzysta z interfejsów wymienionych w poniższej tabeli, które są uwidocznione przez obiekt, który opakowuje.
| Interfejs | Opis |
|---|---|
| IDispatch | W przypadku późnego powiązania z obiektami COM przez odbicie. |
| IErrorInfo | Zawiera tekstowy opis błędu, jego źródła, pliku Pomocy, kontekstu Pomocy i identyfikatora GUID interfejsu, który zdefiniował błąd (zawsze GUID_NULL dla klas platformy .NET). |
| IProvideClassInfo | Jeśli opakowany obiekt COM implementuje IProvideClassInfo, RCW wyodrębnia informacje o typie z tego interfejsu, aby zapewnić lepszą tożsamość typu. |
| IUnknown | W przypadku tożsamości obiektu, konwersji typu i zarządzania cyklem życia: - Tożsamość obiektu Środowisko uruchomieniowe rozróżnia obiekty COM, porównując wartość interfejsu IUnknown dla każdego obiektu. - Przymus typu RcW rozpoznaje odnajdywanie typu dynamicznego wykonywane przez metodę QueryInterface . - Zarządzanie okresem istnienia Korzystając z metody QueryInterface, RCW pobiera i przechowuje odwołanie do niezarządzanego obiektu, dopóki środowisko uruchomieniowe nie wykona zbierania śmieci na otoczce, co zwalnia niezarządzany obiekt. |
RcW opcjonalnie używa interfejsów wymienionych w poniższej tabeli, które są uwidocznione przez obiekt, który opakowuje.
| Interfejs | Opis |
|---|---|
| IConnectionPoint i IConnectionPointContainer | RCW konwertuje obiekty, które udostępniają styl zdarzeń oparty na punktach połączeń, na zdarzenia oparte na delegatach. |
| IDispatchEx (tylko .NET Framework) | Jeśli klasa implementuje interfejs IDispatchEx, RCW implementuje IExpando. Interfejs IDispatchEx jest rozszerzeniem interfejsu IDispatch, który, w przeciwieństwie do interfejsu IDispatch, umożliwia wyliczanie, dodawanie, usuwanie i wywoływanie elementów członkowskich z uwzględnieniem wielkości liter. |
| IEnumVARIANT | Umożliwia obsługę typów COM, które obsługują wyliczenia, które mają być traktowane jako kolekcje. |