Краткие теоретические сведения. Составные части технологии COM

Составные части технологии COM

При создании приложения СОМ используются следующие понятия.

Таблица 1 Понятия технологии СОМ

Понятие Что это такое
Интерфейс СОМ Описывает методы и свойства, доступные программам, обращающимся к объекту. Объект СОМ может иметь один или несколько интерфейсов СОМ и содержит их описание и реализацию
Сервер СОМ Законченный модуль кода (EXE или DLL), в котором хранится программный код одного или нескольких объектов СОМ
Клиент СОМ Программный код, в котором происходит обращение к интерфейсу СОМ с запросом на выполнение услуг сервера СОМ. Клиент СОМ знает, что ему надо получить от сервера СОМ, но не знает, как сервер будет это реализовывать и, вообще, где сервер физически расположен. Некоторая аналогия для клиента СОМ – рассмотренный ранее пример контейнера OLE.

Интерфейс СОМ

Интерфейс СОМ позволяет клиентам СОМ общаться с сервером СОМ на основе стандартного механизма публикации интерфейса. После того как интерфейс СОМ опубликован (стандартным способом зарегистрирован в операционной системе), изменять его нельзя, что гарантирует одинаковую работу объекта СОМ в любых условиях.

Базовый интерфейс IUnknown, который имеется у любого объекта СОМ, позволяет узнать, какие ещё интерфейсы СОМ доступны для клиента СОМ. Все эти интерфейсы наследуют характеристики интерфейса IUnknown.

Уникальность интерфейса обеспечивается его глобальным идентификатором Globally Unique Identifier (GUID) длиной 16 байтов, а каждый объект СОМ имеет идентификатор интерфейса IID (Interface identifier) на основе GUID. Идентификатор GUID требуется, чтобы избежать проблем при появлении интерфейсов СОМ с одинаковыми именами. Например, многие разработчики могут независимо друг от друга создать интерфейс СОМ с именем IGame, однако в каждом конкретном объекте СОМ он будет выполнять разные функции. Для того чтобы различать интерфейсы СОМ не по именам, и были введены идентификаторы GUID.

Благодаря наличию стандартных интерфейсов объект СОМ может быть реализован на любом языке программирования (в том числе и в системе Delphi 7).

Интерфейс IUnknown содержит метод QueryInterface, возвращающий ссылку на другие доступные интерфейсы, а так же методы AddRef и Release, которые увеличивают и уменьшают счётчик ссылок на конкретный интерфейс, когда к нему происходит обращение клиента СОМ. Например, пусть сервер СОМ содержит объект СОМ, имеющий интерфейс ICos, в котором содержится метод, вычисляющий косинус. При каждом обращении из разных программ к этому интерфейсу для вычисления косинуса счётчик увеличивается, а когда интерфейс освобождается (косинус вычислен и его значение передано клиенту СОМ), счётчик уменьшается. Как только значение счётчика становится равным нулю, то есть к интерфейсу больше нет обращений, соответствующий объект СОМ может быть удалён из памяти до следующего запроса к его интерфейсу.

Сервер СОМ

Когда клиент СОМ обращается к серверу СОМ, он передаёт ему идентификатор класса CLSID, представляющий собой GUID, который ссылается на подходящий объект СОМ. Сервер СОМ создаёт специальный объект – фабрику классов (IClassFactory), - который занимается непосредственно созданием и загрузкой (производством) экземпляра нужного объекта СОМ, выполняющего конкретные действия его интерфейса, указанные в запросе клиента СОМ.

Фабрика классов «выпускает» объект СОМ, реализующий один или несколько интерфейсов СОМ, а так же экземпляр специального класса CoClass, который обеспечивает возможность обращения к объекту СОМ на основе интерфейсов СОМ.

Серверы СОМ реализуются тремя способами.

1 в виде библиотеки.DLL. При этом объект СОМ выполняется в адресном пространстве обратившегося к нему приложения.

2 в виде приложения.EXE, которое выполняется в собственном адресном пространстве, но на одной машине с клиентом СОМ.

3 в виде библиотеки.DLL или приложения.EXE, которые загружаются и работают на иной машине, нежели клиент СОМ (технология DCOM).

Ход работы

1 Создание сервера СОМ:

- FileàNewàOther (ФайлàСоздатьàДругое) и на вкладке ActiveX выбирается ActiveX Library (Библиотека объектовActiveX)

Такая библиотека представляет собой сервер СОМ, хранящий набор объектов.

- Теперь в библиотеку добавим объект СОМ:

FileàNewàOther (ФайлàСоздатьàДругое) и на вкладке ActiveX выбирается COM Object (Объект СОМ). (Рис.2)

.

В поле ClassName вводим имя объекта «TestObj». (Рис.3)

Остальные настройки во избежание некорректной работы сервера изменять не следует. Нажать ОК.

В появившейся Библиотеке типов (Type Library) выделяем строку «ITestObj» (интерфейс объекта TestObj) и создаём новый МЕТОД интерфейса.

В новом поле вводим название метода «GetSum». В правой части редактора надо перейти на вкладку Parameters (Параметры функции) и в поле «Return Type» (Тип возвращаемого значения) выбрать «integer».

Создадим выходные параметры метода. В нашем случае их два: «а1» и «а2». Новый параметр создаётся щелчком по кнопке «Add».В поле Type (Тип входящих значений) вводим «integer».

Интерфейс создан. Теперь осталось подготовить его реализацию, т.е. указать как конкретно будет работать метод GetSum. Для этого надо щёлкнуть по кнопке «Refresh Implementation».

Теперь надо перейти в модуль Unit1, где хранится описание объекта «TestObj».В тело метода GetSum надо добавить строку-обработчик входных параметров «а1», «а2»: «Result:=a1+a2;».

Серверный объект СОМ создан. Теперь его следует зарегистрировать в Windows. RunàRegister ActiveX Server.Если работа выполнена без ошибок сервер будет скомпилирован, будет создана библиотека.DLL и содержащийся в ней сервер СОМ зарегистрируется в системе.

Сохраним проект в «Мои документы» в папке «COM object». FileàSave All.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: