Занятие 2. Реализация СОМ
(Продолжительность занятия 15 минут)
Чтобы пользоваться всеми преимуществами технологии СОМ, важно понимать, как она реализована. Это занятие посвящено техническим аспектам реализации СОМ, включая контроль версий, регистрацию компонентов и связь между объектами.
Изучив материал этого занятия, Вы сможете:
Библиотека СОМ
Библиотека СОМ обеспечивает работу СОМ. Этот системный компонент инкапсулирует все действия; связанные с запуском компонентов и их связыванием (5.6). Обычно, создав компонент СОМ, приложение передает его идентификатор класса (CLSID) библиотеке СОМ. Библиотека использует CLSID для нахождения кода соответствующего сервера в регистрационной базе данных. Когда клиент запрашивает создание объекта этого класса, библиотека СОМ выполняет запрос для поиска и запуска соответствующего сервера.
5.6 Библиотека СОМ
Взаимодействие процессов
Именно библиотека СОМ делает взаимодействие между процессами прозрачным. Теперь не приходится заботиться о местонахождении вызываемых компонентов. Объекты СОМ могут свободно взаимодействовать с другими компонентами, выполняющимися в рамках того же процесса, в другом процессе или на ином компьютере. Более того, код, необходимый для реализации или использования элемента, одинаков для любого из этих вариантов. Поэтому при появлении новой библиотеки СОМ с поддержкой межсетевого взаимодействия существующие компоненты могут работать в распределенной среде без изменений исходного кода, перекомпиляции и повторного распространения среди покупателей.
Контроль версий компонентов
По мере расширения функциональности компонентов все более необходим механизм контроля их версий. Такой механизм — фундамент СОМ. Время от времени требуется расширить функции серверного объекта, не затронув при этом клиенты. Именно в таких ситуациях незаменим встроенный в СОМ механизм контроля версий: серверные объекты продолжают поддерживать интерфейсы для старых клиентов, одновременно предоставляя новым клиентам интерфейсы самой свежей версии.
Поддержка эволюции компонентов
СОМ решает проблему контроля версий, обеспечивая возможность эволюции компонентов.
Существующие клиенты при изменении серверных объектов остаются совместимыми — средства СОМ обеспечивают поддержку как новых, так и старых интерфейсов. На стадии выполнения старые и новые клиенты безопасно сосуществуют с серверным компонентом СОМ. Ошибки возможны только во время связывания и вызова Query Interface, однако они легко поддаются обработке. СОМ гарантирует, что не случится ошибки, вызванной отсутствием ожидаемого метода или изменением параметров его вызова. Обратная совместимость Visual Basic реализует обратную совместимость путем сохранения информации об идентификаторах класса или интерфейса предыдущих версий компонента. Если Вы создаете новую версию компонента в Visual Basic, применяя режим Binary Compatibility, она сможет работать со старыми клиентами. При этом клиентские приложения, откомпилированные с ней, будут пользоваться новыми функциями, поскольку при их компиляции задействованы новые идентификаторы класса и интерфейса. И пока сохраняется двоичная совместимость, клиенты с отложенным связыванием смогут работать с Вашим компонентом. Добавление новых интерфейсов Обновление программного модуля — это обычно добавление каких-либо функций или модернизация существующих. Компонент СОМ приобретает новые возможности за счет поддержки последних версий интерфейсов. Поскольку существующие интерфейсы при этом не меняются, компоненты, использующие их, будут работать по-прежнему. Новые же компоненты смогут воспользоваться новыми интерфейсами. Поскольку при применении раннего связывания вызывается метод Query Interface интерфейса lUnknown, текущие возможности компонента СОМ можно выяснить при каждом его использовании. Этот механизм обеспечивает новым клиентам немедленный доступ к появившимся возможностям компонента. Механизм контроля версий Механизм контроля версий считают удачным, если он позволяет обновить один системный компонент без обновления других. Приложения могут создавать экземпляры Ваших классов, используя функцию CreateObject и программный идентификатор, как это показано ниже.
Пример Функция CreateObject находит идентификатор класса в реестре Windows и использует его для создания объекта, гарантируя тем самым создание самой последней версии. Dim X As Object
Set X = CreateObject("MyComponent. MyObject")
Взаимодействие между объектами
СОМ позволяет клиентам связываться с объектами независимо от того, где они выполняются: в том же самом процессе, на том же компьютере или на другом компьютере сети (5.7). Таким образом обеспечивается единая программная модель для объектов-клиентов и объектов-серверов.