Архитектура Microsoft Windows для разработчиков



              

Занятие 2. Реализация СОМ - часть 3


Пример Функция CreateObject находит идентификатор класса в реестре Windows и использует его для создания объекта, гарантируя тем самым создание самой последней версии.

Dim X As Object

Set X = CreateObject("MyComponent. MyObject")

Взаимодействие между объектами

СОМ позволяет клиентам связываться с объектами независимо от того, где они выполняются: в том же самом процессе, на том же компьютере или на другом компьютере сети (рис. 5.7). Таким образом обеспечивается единая программная модель для объектов-клиентов и объектов-серверов.

5-10.jpg

Рис. 5.7 Взаимодействие между процессами

Стандартный маршалинг

Маршалинг (marshaling) — это упаковка всех параметров и возвращаемых значений и передача их через границы процессов. СОМ поддерживает так называемый стандартный маршалинг, который надежно работает для большинства объектов, значительно снижая требования к программной реализации и делая процесс мар-шалинга полностью прозрачным.

Произвольный маршалинг

Стандартный маршалинг есть не что иное, как частный случай произвольного мар-шалинга (custom marshaling). Вы можете реализовать свой вариант маршалинга, если нужно, чтобы объект выполнял один набор действий при сетевом доступе и другой — при локальном, эффективно маскируя это различие от клиента. Такая архитектура позволяет проектировать интерфейсы клиент-объект, не заботясь о производительности сети — эти вопросы можно решить позднее, без изменения разработанной инфраструктуры приложения.

Связь с клиентом

До некоторого момента все вызовы серверных функций клиентом являются внутри-процессными, однако рано или поздно возникает необходимость выхода за границы процесса. Поскольку виртуальные таблицы позволяют агенту (например, СОМ) перехватывать вызов функции (и возврат), агент может при необходимости переадресовать их механизму удаленного вызова процедур (Remote Procedure Call, RPC) так, что ни клиент, ни сервер этого не заметят. Единственное различие заключается в производительности — у внутрипроцессных вызовов она заметно выше.




Содержание  Назад  Вперед