Sdílet prostřednictvím


System.Runtime.InteropServices.ComWrappers – třída

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

Rozhraní ComWrappers API poskytuje podporu IUnknown pro rozhraní API nezávisle na integrované podpoře interoperability modelu COM. Rozhraní ComWrappers API zveřejňuje minimální podporu modulu runtime, kterou vývojáři potřebují k efektivnímu nahrazení integrované verze.

Tradičně se v modulu runtime nazývá nativní proxy pro spravovaný objekt obálka COM (CCW) a spravovaný proxy server nativního objektu se nazývá obálka rcW (Runtime Callable Wrapper). Při použití zde by se však tyto termíny neměly zaměňovat s integrovanými funkcemi stejného názvu (to znamená CCW a RCW). Na rozdíl od předdefinovaných funkcí je většina odpovědnosti za přesnou správu životnosti, metody odesílání a zařazování argumentů a návratových hodnot ponechána implementátoru ComWrappers .

Minimální podpora je definována následujícími funkcemi:

  1. Efektivní mapování mezi spravovaným objektem a nativním proxy serverem (například CCW).
  2. Efektivní mapování mezi nativním IUnknown a spravovaným proxy serverem (například RCW).
  3. Integrace s uvolňováním paměti prostřednictvím kontraktu rozhraní IReferenceTrackerHost

Toto je pokročilý scénář.

Stav proxy serveru

Tato část obsahuje popisy a ilustrace nativního a spravovaného stavu proxy serveru po jejich vytvoření.

Na následujících ilustracích je silný odkaz znázorněn jako plná čára (===) a slabý odkaz je znázorněn jako přerušovaná čára (= = =). Termíny "silné odkazy" a "slabé odkazy" by měly být interpretovány jako "prodloužení životnosti" a "neprodlužuje životnost", a nikoli jako naznačovat konkrétní implementaci.

Následující obrázek znázorňuje stav spravovaného objektu a nativního proxy serveru po volání ComWrappers.GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags).

 --------------------                  ----------------------
|   Managed object   |                |     Native proxy     |
|                    |                | Ref count: 1         |
|  ----------------  |                |  ------------------  |
| | Weak reference |=| = = = = = = = >| | Strong reference | |
| |    to proxy    | |<===============|=|    to object     | |
|  ----------------  |                |  ------------------  |
 --------------------                  ----------------------

Následující obrázek znázorňuje stav nativního objektu a spravovaného proxy serveru po volání ComWrappers.GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags). Koncept identity se řídí pravidly pro IUnknown.

 ------------------               ------------------
|  Native object   |< = = = = = =|                  |
| Ref count: +1    |             | Mapping from     |
 ------------------              | native identity  |
 ------------------------        | to managed proxy |
|   Managed proxy        |< = = =|                  |
| Created by ComWrappers |        ------------------
|   implementer.        |
| Optional AddRef() on   |
|   native object.      |
 ------------------------

Všimněte si, že z pohledu modulu runtime existují pouze slabé odkazy. Předpokládá +1 se, že počet odkazů na nativní objekt provádí spravovaný tvůrce proxy serveru (tj ComWrappers . implementátor) k zajištění přidružené životnosti mezi nativním objektem a jeho spravovaným proxy serverem. Ve spravovaném proxy serveru je uvedený volitelný silný odkaz (tj AddRef(). ), který se používá k podpoře scénáře (3) uvedeného dříve. Viz třída CreateObjectFlags.TrackerObject. S tímto volitelným silným odkazem by počet odkazů byl +2.