Sdílet prostřednictvím


Obálky COM

Objektový model COM se liší od objektového modelu modulu runtime .NET několika důležitými způsoby:

  • Klienti objektů MODELU COM musí spravovat životnost těchto objektů; modul CLR (Common Language Runtime) spravuje životnost objektů v jeho prostředí.

  • Klienti objektů MODELU COM zjistí, zda je služba k dispozici vyžádáním rozhraní, které tuto službu poskytuje, a získáním ukazatele rozhraní, nebo ne. Klienti objektů .NET mohou získat popis funkce objektu pomocí reflexe.

  • Objekty NET se nacházejí v paměti spravované spouštěcím prostředím modulu runtime .NET. Spouštěcí prostředí může přesouvat objekty v paměti z důvodů výkonu a aktualizovat všechny odkazy na objekty, které přesune. Nespravované klienty, kteří získali ukazatel na objekt, spoléhají na objekt, aby zůstal ve stejném umístění. Tito klienti nemají žádný mechanismus pro práci s objektem, jehož umístění není opraveno.

Modul runtime poskytuje třídy obálky, které umožňují spravovaným i nespravovaným klientům zjistit, že v příslušném prostředí volají objekty. Pokaždé, když spravovaný klient volá metodu objektu COM, modul runtime vytvoří obálku s možností volatelného modulu runtime (RCW). RcWs mimo jiné abstrahují rozdíly mezi spravovanými a nespravovanými referenčními mechanismy. Modul runtime také vytvoří obálku s možností volání modelu COM (CCW) pro obrácení procesu, což klientovi MODELU COM umožňuje bezproblémově volat metodu objektu .NET. Jak ukazuje následující obrázek, perspektiva volajícího kódu určuje, kterou třídu obálky modul runtime vytvoří.

COM wrapper overview

Ve většině případů poskytuje standardní RCW nebo CCW vygenerované modulem runtime odpovídající zařazování pro volání, která překračují hranice mezi modelem COM a modulem runtime .NET. Pomocí vlastních atributů můžete volitelně upravit způsob, jakým modul runtime představuje spravovaný a nespravovaný kód.

Viz také