Obálka volatelná za běhu

Modul CLR (Common Language Runtime) zveřejňuje objekty COM prostřednictvím proxy serveru označovaného jako obálka volatelná 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í. Modul runtime udržuje pro každý objekt jeden RCW pro každý proces. Pokud vytvoříte rcW v jedné doméně nebo apartmánu aplikace a pak předáte odkaz na jinou doménu nebo byt aplikace, použije se proxy server k prvnímu objektu. Všimněte si, že tento proxy server je nový spravovaný objekt, a ne stejný jako počáteční analýza RCW; to znamená, že dva spravované objekty nejsou stejné, ale představují stejný objekt MODELU COM. 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:

Process for accessing COM objects through the RCW.

Pomocí metadat odvozených z knihovny typů vytvoří modul runtime objekt COM, který se volá, i obálku pro daný objekt. Každá analýza RCW udržuje mezipaměť ukazatelů rozhraní na objektu COM, který zabalí a uvolní svůj odkaz na objekt COM, když rcW už není potřeba. Modul runtime provádí uvolňování paměti ve verzi RCW.

Kromě jiných aktivit zařazuje RCW data mezi spravovaným a nespravovaným kódem jménem zabaleného objektu. RcW konkrétně poskytuje zařazová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 do svého spravovaného volajícího, volající obdrží stringznak . Klient i server odesílají a přijímají data, která jsou jim známa. Jiné typy nevyžadují žádný převod. Standardní obálka například vždy předá 4bajtů celé číslo mezi spravovaným a nespravovaným kódem bez převodu typu.

Zařazování vybraných rozhraní

Hlavním cílem volatelného obálky modulu runtime (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 zpřístupňuje klientovi .NET, jak je znázorněno na následujícím obrázku.

Následující obrázek znázorňuje rozhraní MODELU COM a obálku s možností volatelného modulu runtime:

Screenshot of the runtime callable wrapper with interfaces.

Při vytváření jako objekt s časnou vazbou je RCW konkrétní 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ý zalamuje.

Rozhraní Popis
Idispatch Pozdní vazby k objektům MODELU COM prostřednictvím reflexe.
Ierrorinfo Poskytuje textový popis chyby, její 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í QueryInterface metoda RCW získá a obsahuje odkaz na nespravovaný objekt, dokud modul runtime neprovede uvolňování paměti obálky, která uvolní nespravovaný objekt.

RcW volitelně využívá rozhraní uvedená v následující tabulce, která jsou vystavena objektem, který zabalí.

Rozhraní Popis
I Připojení ionPoint a I Připojení ionPointContainer Analýza RCW převede objekty, které zpřístupňují styl události spojovacího bodu pro delegované události.
IDispatchEx (pouze .NET Framework) Pokud třída implementuje IDispatchEx, RCW implementuje IExpando. IDispatchEx rozhraní je rozšíření IDispatch rozhraní, které, na rozdíl od IDispatch, umožňuje výčtu, přidání, odstranění a rozlišování malých a velkých písmen volání členů.
IEnumVARIANT Umožňuje typy modelu COM, které podporují výčet, které se mají považovat za kolekce.

Viz také