Общая концепция
Технология COM
Как было отмечено выше, основу технологии COM составляет спецификация, которая указывает, как создавать динамически взаимозаменяемые компоненты. СОМ определяет стандарт, которому должны следовать компоненты и клиенты, чтобы гарантировать возможность совместной работы.
Компоненты СОМ состоят из исполняемого кода, распространяемого в виде динамически компонуемых библиотек (DLL) или EXE-файлов Win32.
Для динамического подключения друг к другу компоненты СОМ используют DLL. Однако, сама по себе динамическая компоновка не обеспечивает компонентной архитектуры: компоненты должны быть инкапсулированы.
Обеспечение инкапсуляции в компонентах COM достигается за счет соблюдения ряда следующих технологических ограничений:
1. Компоненты полностью независимы от языка программирования (т.е. могут быть разработаны с помощью практически любого процедурного языка).
2. Компоненты могут распространяться в информационной среде в двоичной форме.
3. Компоненты можно модернизировать, не нарушая работы старых клиентов (СОМ предоставляет стандартный способ реализации разных версий компонента).
|
|
|
4. Компоненты СОМ можно прозрачно перемещать по сети (компонент на удаленной системе рассматривается так же, как компонент на локальном диске компьютера).
ОС Windows выстроена на основе технологии COM. COM-объекты выполняют разные функции, создаются и уничтожаются системой автоматически (по мере возникновения запросов от пользователей). Достаточно только описать интерфейс COM-объекта и запрограммировать его реализацию, все остальное выполняет компилятор и Windows.
При разработке приложений COM пользуются следующими составные части технологии:
Интерфейс COM – описывает методы и свойства, доступные программам, обращающимся к объекту.
Сервер COM – законченный модуль кода (EXE или DLL), в котором хранится программный код одного или нескольких объектов COM.
Клиент COM – программный код, в котором происходит обращение к интерфейсу с запросом на выполнение услуг сервера COM.
Интерфейсы составляют основу данной технологии. Для клиента компонент представляет собой набор интерфейсов, которые являются единственным каналом взаимодействия клиента с компонентом СОМ.
Компонент можно удалить и заменить другим; если новый компонент поддерживает те же интерфейсы, что и старый, приложение будет работать по-прежнему.
Интерфейс COM позволяет клиентам COM общаться с сервером на основе стандартного механизма публикации интерфейса. После того, как интерфейс COM опубликова н (стандартным способом зарегистрирован системой), изменять его нельзя, что гарантирует одинаковую работу объекта COM в любых условиях.
|
|
|
У любого объекта COM имеется базовый интерфейс – IUnknown, который позволяет узнать, какие еще интерфейсы COM доступны для клиента COM. Все эти интерфейсы наследуют характеристики интерфейса IUnknown.
Уникальность интерфейса обеспечивается его глобальным идентификатором – Globally Unique IDentifier (GUID) длиной 16 байтов. Каждый объект COM имеет идентификатор интерфейса – Interface IDentifier (IID) на основе GUID. GUID требуется для избежания проблем при появлении интерфейсов COM с одинаковыми именами.
Благодаря наличию стандартных интерфейсов объект COM может быть реализован на любом языке программирования. Интерфейс IUnknown содержит метод QueryInterface, возвращающий ссылку на другие доступные интерфейсы, а также методы AddRef и Release, которые увеличивают и уменьшают счетчик ссылок на конкретный интерфейс.

Счетчик увеличивается при обращении к интерфейсу и уменьшается при освобождении интерфейса. Как только значение счетчика равно нулю, т.е. к интерфейсу больше нет обращений, соответствующий объект COM может быть удален из памяти до следующего запроса к его интерфейсу.
На основе технологии COM был создан ряд расширений: серверы автоматизации (OLE), активные серверные страницы (.ASP), встраиваемые серверы ActiveX с визуальной настройкой и др.