Использование технологии COM

Технология СОМ реализуется с помощью СОМ-библиотек (в число которых входят такие файлы операционной системы, как OLE32.DLL и OLE-Aut32.DLL). СОМ-библиотеки содержат набор стандартных интерфейсов, которые обеспечивают функциональность СОМ-объекта, а также небольшой набор функций API, отвечающих за создание и управление СОМ-объектов.

Клиенты не знают, как СОМ-объект выполняет свои действия. СОМ-объект предоставляет свои услуги при помощи интерфейсов. В дополнение, приложению-клиенту не нужно знать, где находится СОМ-объект. Технология СОМ обеспечивает прозрачный доступ независимо от местонахождения СОМ-объекта.

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

В общих чертах, СОМ-сервер должен выполнять следующие действия :

- регистрировать данные в системном реестре Windows для связывания модуля сервера с идентификатором класса (CLSID);

- предоставлять фабрику СОМ-класса, создающую экземпляры СОМ-объектов;

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

Библиотеки типов. При создании СОМ-объектов часто используются библиотеки типов. Библиотека типов - это специальный файл, который содержит информацию о СОМ-объекте. Данная информация содержит список свойств, методов, интерфейсов, структур и других элементов, которые содержатся в СОМ-объекте. Библиотека типов содержит также информацию о типах данных каждого свойства и типах данных, возвращаемых методами СОМ-объекта. Файлы библиотеки типов имеют расширение TLB.

Достоинствами технологии СОМ является то, что, во-первых, создание СОМ-объектов не зависит от языка программирования. Таким образом, СОМ-объекты могут быть написаны на различных языках. Во вторых, СОМ-объекты могут быть использованы в любой среде программирования под Windows. В число этих сред входят Delphi, Visual C++, C++Builder, Visual Basic, и многие другие. Эти достоинства позволяют легко обеспечить интеграцию самых разнообразных приложений в рамках СОМ-технологии.

Компоненты СОМ состоят из исполняемого кода, распространяемого в виде динамически компонуемых библиотек (DLL) или ЕХЕ-файлов Win32. Один такой файл может содержать как одиночный СОМ-объект, так и несколько СОМ-объектов. Компоненты, написанные в соответствии со стандартом СОМ, удовлетворяют всем требованиям компонентной архитектуры.

C точки зрения разработчика, возможны два класса задач, связанных с использованием технологии COM:

· создание собственных COM-объектов;

· применение уже имеющихся COM-объектов.

Первый класс задач более сложен и требует от разработчика достаточно глубокого знакомства с технологией COM и ее компонентами. В рамках данной работы мы не будем рассматривать эти задачи. Задачи же второго класса значительно проще, ибо применение уже имеющихся COM-объектов, по сути, мало чем отличается от работы с обычными объектами. Поскольку в состав самой Windows входят многочисленные COM-объекты, а многие приложения имеют хорошо документированные соответствующие иерархии COM-объектов (объектные модели), то создание таких приложений обычно не представляет особых трудностей.

В процессе выполнения заданий по второй учебной практике вы познакомились с двумя технологиями, базирующимися на технологии COM –OLE Automation, широко применяющейся в рамках пакета Microsoft Office, и технологиейActiveX, представляющих собой общее название ряда близких технологий фирмы Microsoft, таких как ActiveX-Controls, ActiveX-Documents и ActiveScripting. технологияActiveXпредназначена, в первую очередь, для работы в распределенных компьютерных системах (локальные и глобальные сети). Однако она может быть использована и для интеграции приложений и на локальных компьютерах, так как позволяет создавать и использовать программные компоненты, предоставляющие различные сервисы другим приложениям и операционной системе.


2.5 Библиотека COM

Для выполнения базовых функций и использования интерфейсов, в ОС Windows существует специальная библиотека COM. Набор ее функций можно рассматривать как подмножество функций Windows API, поэтому к ним всегда возможен доступ стандартным способом – вызовом соответствующих функций. Согласно спецификации СОМ, имена всех функций этой библиотеки начинаются с приставки “Co” (например, CoCreateInstance, CoGetClassObject и т. п.).

С помощью этой библиотеки можно осуществлять запуск серверов объектов.

Использование технологии COM - student2.ru
На рис. 2.6 показан процесс создания первого экземпляра объекта с помощью библиотеки COM и системного реестра. Допустим, что клиент пытается обратиться к объекту COM, который до этого момента не использовался. Следовательно, клиент не имеет указателя на нужный объект и интерфейс. Для получения этих данных, ему необходимо обратиться к библиотеке COM для вызова (1) специального метода CoCreateInstance, передавая ему в качестве параметра CLSID нужного класса (CLSID_2), IID интерфейса (IID2_A) и требуемый тип сервера. Здесь (и далее) числовой номер в скобках соответствует номеру в последовательности выполнения операций, который на рис. 2.6 указывается в кружках на стрелках.

Затем, библиотека (2) при помощи диспетчера управления службами SCM (Service Control manager)обращается (3) к системному реестру по идентификатору класса (CLSID_2), и, если такой сервер в реестре зарегистрирован, то, взяв оттуда необходимую информацию о сервере, запускает его (4). Когда клиент запрашивает услугу от СОМ-объекта, он передает СОМ-объекту идентификатор класса (CLSID). CLSID - всего лишь GUID, который применяется при обращении к СОМ-объекту. После передачи CLSID, СОМ-сервер должен обеспечить так называемую фабрику класса, которая собственно, и создает экземпляры СОМ-объектов (5).

В общих чертах, СОМ-сервер должен выполнять следующие действия:

- регистрировать данные в системном реестре Windows для связывания модуля сервера с идентификатором класса (CLSID);

- предоставлять фабрику СОМ-класса, создающую экземпляры СОМ-объектов;

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

После создания фабрикой классов СОМ-объекта, вызывается метод QueryInterface (6) интерфейса IUnknown, который возвращает указатель на запрошенный интерфейс IAnyInterface (с идентификатором IID2_A) библиотеке COM (7), а та, в свою очередь, - передает его клиенту (8), который после этого получает возможность обращаться непосредственно к СОМ-объекту (9). Кроме того, при вызове метода QueryInterface автоматически выполняется так же и метод AddRef, увеличивающий счетчики ссылок внутри COM-объекта и сервера на единицу.

Фабрика класса. Как отмечалось выше, для запуска экземпляра класса используется специальный объект - фабрика класса. С его помощью можно создать как один объект, так и несколько экземпляров.Для каждого класса должна существовать собственная фабрика класса.

Согласно спецификации СОМ фабрика класса также является объектом СОМ. Объект СОМ имеет право называться фабрикой класса, если он поддерживает интерфейс iclassFactory. В нем реализованы всего два метода:

-CoCreatelnstance- создает новый экземпляр класса. Все необходимые параметры, кроме iid, метод получает от фабрики класса. В этом его отличие от одноименной общей функции Windows API;

-LockServer- оставляет сервер функционировать после создания объекта.

Для вызова фабрики класса существует специальная функция библиотеки классовcoGetclassObject:

 
  Использование технологии COM - student2.ru

В качестве параметра ей передается clsid нужного класса и iid интерфейса (iclassFactory). Функция ищет требуемую фабрику и возвращает указатель на интерфейс. С его помощью, используя методCoCreatelnstance, клиент заставляет фабрику класса создать объект.

Расширения COM

Технология СОМ изначально разрабатывалась как ядро для осуществления межпрограммного взаимодействия. Уже на этапе разработки предполагалось расширять возможности технологии при помощи так называемых расширений СОМ. СОМ расширяет собственную функциональность, благодаря созданию специализированных наборов интерфейсов для решения конкретных задач.

Примером могут служить ранее упоминавшиеся технология автоматизации (automation) и технология ActiveX. Однако, на этом список возможных расширений СОМ далеко не исчерпывается. Постоянно идет доработка старых и создание новых, более совершенных технологий межпрограммного взаимодействия. В табл. 2.1 представлены некоторые из наиболее часто используемых в настоящее время (но далеко не все!) расширений СОМ.

В табл. 2.2 приведены основные особенности объектов для каждого из вышеприведенных расширений СОМ.

Если не считать простейшего COM-объекта (COM-сервера), содержащего один базовый интерфейс Iunknown и, один или несколько пользовательских интерфейсов, то наиболее простым из указанных в таблице 2.1 расширений СОМ является сервер автоматизации. По сути, он представляет собой простейший COM-сервер, дополненный еще одним интерфейсом – Idispatch.

Технология автоматизации (OLE Automation)разработана на основе технологии СОМ. Так же как и СОМ, автоматизация позволяет использовать функции одних приложений в других приложениях.Автоматизация- это механизм обмена информацией между процессами в операционной системе Windows, с помощью которого одна прикладная программа может управлять другой. Технология OLE Automation обеспечивает выполнение базовых функций, позволяющих обособленным программным модулям связываться и обмениваться информацией. Многие используемые в технологии автоматизации термины подобны тем, которые применяются при описании технологии СОМ.

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

Сервер автоматизациипредставляет собой исполняемый модуль, который может включать в себя несколько объектов автоматизации.

Контроллером (диспетчером) автоматизациипринято называть клиентское приложение, управляющее объектом автоматизации. Контроллер автоматизации для управления объектом автоматизации использует методы интерфейсов этого объекта. Для получения информации об интерфейсах служат библиотеки типов.


Таблица 2.1. Расширения СОМ
Расширение СОМ Краткое описание
Серверы автоматизации (Automation servers) Серверы автоматизации - это объекты, которыми можно управлять из других приложений во время работы приложения. Таким образом, автоматизация - это способность приложения программно контролировать объекты других приложений
Диспетчеры автоматизации или СОМ-клиенты (Automation Controllers, COM Clients) Диспетчеры автоматизации - это клиенты серверов автоматизации. Они позволяют разработчику или пользователю писать сценарии для управления серверами автоматизации
Элементы управления ActiveX (ActiveX Controls) Элементы управления ActiveX предназначены для серверов внутри процесса (in-process COM servers). Элементы ActiveX обычно используются путем встраивания в приложение-клиент
Библиотеки типов(Type Libraries) Библиотеки типов представляют собой статичные структуры данных, которые часто сохраняются как файлы ресурсов. Они содержат детализированную информацию об объекте и его интерфейсах. Клиенты серверов автоматизации и элементы управления ActiveX используют данную информацию и всегда считают ее доступной
Страницы активного сервера - ASP (Active Server Pages) Активные серверные страницы - это компоненты ActiveX, которые позволяют вам создавать динамически изменяющиеся Web-страницы
Активные документы (Active Documents) Активные документы - это объекты, которые поддерживают связывание и внедрение, визуальное редактирование, перенос (drag-and-drop). В качестве примера таких документов можно представить документы Microsoft Word и книги Microsoft Excel
Визуальные межпроцессные объекты (Visual Cross-process Objects) Визуальные межпроцессные объекты - это визуальные объекты, которыми можно управлять из других процессов

Таблица 2.2 Особенности наиболее распространенных объектов COM
СОМ-объект Визуальность Процесс Связь Библиотека типов
Активный документ (Active Document) Обычно визуальный Внутренний или локальный OLE Нет
Автоматизация (Automation) Может быть как визуальным, так и невизуальным Внутренний, локальный или удаленный Автоматический маршалинг при помощи интерфейса IDispatch Требуется для автоматического маршалинга
Элемент управления ActiveX (ActiveX Control) Обычно визуальный Внутренний Автоматический маршалинг при помощи интерфейса IDispatch Требуется
Произвольный объект интерфейса По выбору Внутренний Не требуется маршалинг Рекомендуется
Произвольный объект интерфейса По выбору Внутренний, локальный или удаленный Автоматический маршалинг в зависимости от библиотеки типов, в противном случае - ручной маршалинг Рекомендуется

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

Мастера СОМ-объектов выполняют следующие действия:

Наши рекомендации