Доступ к управляемым компонентам из клиентов на основе модели компонентных объектов Microsoft (COM)
Очевидно, что скорее всего вам потребуется создать новое приложение .NET, в котором используются существующие компоненты, основанные на модели компонентных объектов Microsoft (COM). Однако иногда может потребоваться пройтись и в другом направлении.
Например, может существовать некоторое приложение, которое использует один или несколько компонентов на основе модели компонентных объектов Microsoft (СОМ), и вы хотите переписать некоторые из этих компонентов в виде компонентов .NET, чтобы их можно было использовать в будущих решениях .NET. Однако в то же время вам может быть необходимо использовать эти новые компоненты .NET в своих существующих клиентских приложениях, основанных на модели компонентных объектов Microsoft (COM).
Программы клиентов на основе модели компонентных объектов Microsoft (COM) могут использовать раннее связывание или динамическое связывание для доступа к управляемым компонентам .NET. Для раннего связывания информация из библиотеки типов должна быть доступна во время компиляции. Для динамического связывания этого не требуется, поскольку связывание производится во время выполнения при помощи методов интерфейса IDispatch.
Однако независимо от того, использует клиент раннее или динамическое связывание, требуется мост между родной неуправляемой средой выполнения клиента на основе модели компонентных объектов Microsoft (COM) и управляемой средой выполнения компонента.NET. Этот мост называется вызываемым упаковщиком на основе модели компонентных объектов Microsoft (COM) (Callable COM Wrapper, CCW), который выступает в качестве заместителя для управляемого объекта, что и показано на рис. 15.3.
Для каждого данного управляемого объекта, созданного для клиента на основе модели компонентных объектов Microsoft (COM), создается только один объект вызываемого упаковщика на основе модели компонентных объектов Microsoft (COM) (Callable COM Wrapper, CCW).
Вызываемый упаковщик на основе модели компонентных объектов Microsoft (COM) (Callable COM Wrapper, CCW) управляет временем существования объектов в соответствии с правилами подсчета ссылок в Unknown, а также управляет марша-лингом вызовов метода для объекта.
Рис. 15.3. Вызываемый упаковщик на основе модели компонентных объектов Microsoft (COM) (Callable COM Wrapper, CCW) между неуправляемым и управляемым кодами