Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Běhové prostředí (Common Language Runtime) zveřejňuje objekty COM prostřednictvím proxy označované jako obálka volání za běhu (RCW). Přestože rcW vypadá jako běžný objekt pro klienty .NET, jeho primární funkcí je zařazování volání mezi klientem .NET a objektem COM.
Modul runtime pro každý objekt COM vytvoří přesně jednu rcW bez ohledu na počet odkazů, které na daném objektu existují. Runtime udržuje jeden RCW pro každý objekt a proces. Pokud vytvoříte RCW v jedné aplikační doméně nebo apartmánu a pak předáte odkaz na jinou aplikační doménu nebo apartmán, použije se proxy pro první objekt. Všimněte si, že tento proxy je nový spravovaný objekt a není stejný jako počáteční RCW; to znamená, že tyto dva spravované objekty nejsou stejné, ale reprezentují stejný COM objekt. Jak ukazuje následující obrázek, libovolný počet spravovaných klientů může obsahovat odkaz na objekty MODELU COM, které zpřístupňují INew
a INewer
rozhraní.
Následující obrázek znázorňuje proces přístupu k objektům MODELU COM prostřednictvím obálky volatelného modulu runtime:
Pomocí metadat odvozených z knihovny typů vytvoří modul runtime objekt COM, který se volá, i obálku pro daný objekt. Každé RCW udržuje mezipaměť ukazatelů na rozhraní objektu COM, který obaluje, a uvolňuje svůj odkaz na objekt COM, když už RCW není potřeba. Modul runtime provádí uvolňování paměti ve verzi RCW.
Kromě jiných aktivit zprostředkovává RCW data mezi spravovaným i nespravovaným kódem pro zabalený objekt. RCW konkrétně poskytuje proces zesílání pro argumenty metody a návratové hodnoty metody vždy, když klient a server mají různé reprezentace dat předávaných mezi nimi.
Standardní obálka vynucuje předdefinovaná pravidla pro řazení. Když například klient .NET předá string
typ jako součást argumentu nespravovanému objektu, obálka převede string
typ na BSTR
typ. Pokud objekt COM vrátí BSTR
svému spravovanému volajícímu, volající obdrží string
. Klient i server odesílají a přijímají data, která jsou jim známa. Jiné typy nevyžadují žádný převod. Například standardní obal vždy předá 4bajtové celé číslo mezi spravovaným a nespravovaným kódem bez převodu typu.
Zařazování vybraných rozhraní
Hlavním cílem modulu runtime volací obálky (RCW) je skrýt rozdíly mezi spravovanými a nespravovanými programovacími modely. K vytvoření bezproblémového přechodu RCW využívá vybraná rozhraní modelu COM, aniž by je vystavil klientovi .NET, jak je znázorněno na následujícím obrázku.
Následující obrázek znázorňuje rozhraní COM a obálku volatelnou za běhu.
Pokud je RCW vytvořen jako objekt s časnou vazbou, má specifický typ. Implementuje rozhraní, která objekt COM implementuje a zveřejňuje metody, vlastnosti a události z rozhraní objektu. Na obrázku RCW zveřejňuje rozhraní INew, ale využívá rozhraní IUnknown a IDispatch . RcW dále zveřejňuje všechny členy rozhraní INew klientovi .NET.
RCW využívá rozhraní uvedená v následující tabulce, která jsou vystavena objektem, který obaluje.
Rozhraní | Popis |
---|---|
IDispatch | Pro pozdní vazby k COM objektům prostřednictvím reflexe. |
IErrorInfo | Poskytuje textový popis chyby, jeho zdroj, soubor nápovědy, kontext nápovědy a identifikátor GUID rozhraní, které definovalo chybu (vždy GUID_NULL pro třídy .NET). |
IProvideClassInfo | Pokud zabalený objekt COM implementuje IProvideClassInfo, RCW extrahuje informace o typu z tohoto rozhraní, aby poskytovala lepší identitu typu. |
IUnknown | Pro identitu objektu, převod typů a správu životnosti: – Identita objektu Modul runtime rozlišuje mezi objekty COM porovnáním hodnoty rozhraní IUnknown pro každý objekt. - Převod typu Analýza RCW rozpozná dynamické zjišťování typů prováděné metodou QueryInterface . - Správa životnosti Pomocí metody QueryInterface získá a drží RCW odkaz na nespravovaný objekt, dokud runtime neprovede uvolnění obálky, čímž uvolní nespravovaný objekt. |
RCW volitelně využívá rozhraní uvedená v následující tabulce, která jsou vystavena objektem, který obaluje.
Rozhraní | Popis |
---|---|
IConnectionPoint a IConnectionPointContainer | RCW převádí objekty, které zprostředkovávají styl události spojovacího bodu, na události založené na delegátech. |
IDispatchEx (pouze pro .NET Framework) | Pokud třída implementuje IDispatchEx, RCW implementuje IExpando. Rozhraní IDispatchEx je rozšířením rozhraní IDispatch, které, na rozdíl od IDispatch, umožňuje výčet, přidání, odstranění a volání členů rozlišující malá a velká písmena. |
IEnumVARIANT | Umožňuje, aby se typy COM, které podporují výčty, považovaly za kolekce. |