Otoki COM

Model COM różni się od modelu obiektów środowiska uruchomieniowego platformy .NET na kilka ważnych sposobów:

  • Klienci obiektów COM muszą zarządzać okresem istnienia tych obiektów; środowisko uruchomieniowe języka wspólnego zarządza okresem istnienia obiektów w swoim środowisku.

  • Klienci obiektów COM odkrywają, czy usługa jest dostępna, żądając interfejsu, który zapewnia usługę i wracając do wskaźnika interfejsu, czy też nie. Klienci obiektów platformy .NET mogą uzyskać opis funkcji obiektu przy użyciu odbicia.

  • Obiekty NET znajdują się w pamięci zarządzanej przez środowisko wykonawcze środowiska uruchomieniowego platformy .NET. Środowisko wykonywania może przenosić obiekty w pamięci ze względu na wydajność i aktualizować wszystkie odwołania do obiektów, które przenosi. Klienci niezarządzani, po uzyskaniu wskaźnika do obiektu, polegają na tym, aby obiekt pozostał w tej samej lokalizacji. Ci klienci nie mają mechanizmu radzenia sobie z obiektem, którego lokalizacja nie jest stała.

Aby przezwyciężyć te różnice, środowisko uruchomieniowe udostępnia klasy otoki, aby klienci zarządzani i niezarządzani myśleli, że wywołuje obiekty w odpowiednim środowisku. Za każdym razem, gdy zarządzany klient wywołuje metodę w obiekcie COM, środowisko uruchomieniowe tworzy otokę wywołującą środowisko uruchomieniowe (RCW). RcWs abstrakcje różnic między zarządzanymi i niezarządzanych mechanizmów odwołań, między innymi. Środowisko uruchomieniowe tworzy również otokę wywoływaną modelu COM (CCW) w celu odwrócenia procesu, umożliwiając klientowi COM bezproblemowe wywołanie metody w obiekcie platformy .NET. Jak pokazano na poniższej ilustracji, perspektywa kodu wywołującego określa klasę otoki tworzoną przez środowisko uruchomieniowe.

COM wrapper overview

W większości przypadków standard RCW lub CCW wygenerowany przez środowisko uruchomieniowe zapewnia odpowiednie marshalling dla wywołań, które przekraczają granicę między com i środowiskiem uruchomieniowym platformy .NET. Za pomocą atrybutów niestandardowych możesz opcjonalnie dostosować sposób, w jaki środowisko uruchomieniowe reprezentuje zarządzany i niezarządzany kod.

Zobacz też