Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Технология COM

Содержание:

Введение

В данной работе нами будет детально рассмотрена технология COM, которая на данном этапе довольно много где используется при разработке программного обеспечения, интеграции программных продуктов в единые информационные системы. Целью для разработки COM-технологии явилось стремление к интеграции программного обеспечения через стандартизацию механизмов взаимодействия программных модулей между друг другомС этим приходится считаться, и каждый программный продукт, выпущенный под платформу Windows, для достижения коммерческого успеха обязан соответствовать инновациям Microsoft.

Актуальность курсовой работы состоит в том, что на данный момент времени существует огромное количество программ, которые имеют подобное происхождение, как и у COM- технологии и предназначение такое же, но именно эта программа пользуется популярностью и как мы уже сказали, все это напрямую зависит от ее разработчика. Поэтому я выбрала имеемо эту тему для своего исследования, так как хотела полностью обозначить все факторы данного программного обеспечения и более подробно ее изучить.

Предметом является детальный анализ COM – технологии.

Объектом выступает - COM – технология.

Целью является описать данную технологию, раскрыть ее сущность и основные функции.

Задачи:

  1. Описание COM – технологии
  2. Описание используемых интерфейсов
  3. Описание COM – объектов
  4. Рассмотрение и описание расширений для COM
  5. Описание COM – клиентов.

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

Общая характеристика COM-технологии

Общие положения COM- технологии и ее характеристика

Технология COM – представляет собой объектно-ориентированную программу, которую нам предлагает Microsoft. Такой вид программы, как COM была разработана именно для повышения надежности взаимодействия программных обеспечений между собой. Представленная технология не определяет структуру программного продукта, язык программирования и прочие детали реализации. COM является стандартной программой, которая преобразует модель программного объекта, который в свою очередь соответствует требованиям COM-технологии. [1]

Программный объект, который был создан согласно спецификации данного программного обеспечения называется COM-объектом. Данная технология устанавливает основные показатели того, как COM-объекты взаимодействуют между собой. Данную программу мы можем отнести к так называемым двоичным стандартам, т.к. прилагается к оттранслированному в двоичный код программному объекту.[2] Взаимодействие COM-объектов обеспечивается набором предопределенных подпрограмм, которые называются интерфейсы. Доступ к ним мы можем наблюдать через такие идентификаторы интерфейсов GUID (Global Unique Interface Identifyer), уникальность которых гарантирует операционная система. Но о них мы поговорим чуть позже.[3]

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

Давайте подведем итоги первого раздела нашей работы и еще раз отметим те важные моменты, о которых мы упоминали выше, но уже в более сжатом изложении. [4]

Таким образом, мы можем сделать вывод, анализируя вышеописанные показатели и опираясь на собственные знания, объекты, программного обеспечения COM, могут быть прозрачно друг для друга модифицироваться, т.к. доступ к объектам обеспечивается через GUID. COM технология может включать в себя также библиотеку, которая будет содержать в себе стандартный набор интерфейсов, которые в свою очередь могут определять ядро функциональности COM и небольшой набор API функций, разработанных для создания COM-объектов и управления ими.[5]

Архитектура COM является расширяемой, и на ней базируются другие технологии Microsoft, такие как OLE и ActiveX.[6] Данные технологии в настоящем времени служат дополнительными расширениями операционной системы, и определяют свои собственные правила работы и предлагают свои библиотеки для создания объектов и для управления объектами на основе данных технологий.

Используя COM как основу, разработчики программного обеспечения имеют возможность создавать свои собственные расширения таким образом, что программные объекты созданные, по правилам COM-технологии могут работать с другими COM-объектами через унифицированный механизм взаимодействия, который предлагает COM.

COM использует такое понятие как «класс», которое по своему смыслу означает то же самое, что и в объектно-ориентированных средствах разработки. COM-объект является объектом COM-класса (COM class). COM-классы, для различия с классами в объектно-ориентированных языках, с помощью которых может создаваться приложение, обычно называются соклассами (CoClass). Далее в тексте будет использоваться терминология, исходящая из объектно-ориентированного программирования.

Интерфейсы

Интерфейс в данной программе является основной строительной единице в программном обеспечении COM. Они объединяются на семантически связанные группы подпрограмм, через которые COM-объекты осуществляют взаимодействие:

http://www.bestreferat.ru/images/paper/28/74/8927428.png

В данном разделе мы с вами рассмотрим основные положения интерфейсов в программной технологии «COM». Определим их виды, значения, как они устроены их функции и дадим общую характеристику значимости их работы.[7]

Начнем мы с ключевых аспектов, которые COM определяет для интерфейсов:

· Методы интерфейса абстрактны. Данный интерфейс представляет собой набор прототипов методов, назначение которых заключается только в определении интерфейса. Определения методов включает в себя определения числа и типов передаваемых значений, возвращаемого значения, а также ожидаемого поведения объекта.[8] Как методы реализованы, в определение интерфейса не включается.[9] Таким образом, реализуется полиморфизм интерфейса, т.к. каждый потомок, наследующий интерфейс, может включать собственную реализацию метода;

· Интерфейс подчиняется двоичному стандарту. Так как все методы интерфейса абстрактны, интерфейс представлен как указатель на vtable (virtual table). Каждая запись в vtable представляет собой ссылку на соответствующий метод класса, который содержит реализацию интерфейса. Определение интерфейса как указателя устанавливает протокол для доступа к COM-объекту, который является двоичным. Таким образом, получение доступа к реализации метода интерфейса объекта представляет собой через последовательную процедуру получения указателей:

http://www.bestreferat.ru/images/paper/29/74/8927429.png

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

· Интерфейс включает в себя определенную функциональность. Методы интерфейса семантически связаны по функциональности и назначению. Согласно этому, методы интерфейса обычно именуется согласно своему назначению, и имя предваряется заглавной I. Для примера, метод IMalloc предназначен для размещения и освобождения памяти;

· Интерфейс имеет уникальный идентификатор. Интерфейсы различаются посредством использования глобальных идентификаторов GUID, которые используются для ссылки на идентификаторы конкретных интерфейсов IID (Interface Identifier). Каждый интерфейс имеет свой IID, и при регистрации в системе получает связанный с ним GUID. Использование GUID более совершенно, чем использование символьных имен, т.к. гарантирует отсутствие конфликтов имен при обновлении программных продуктов (выхода новых версий) и при использовании программного обеспечения от различных производителей;

· Интерфейс не может измениться после регистрации в системе. Каждый интерфейс предназначен для выполнения определенной задачи, и определяет, какие данные поступают на обработку и какие данные выводятся. Таким образом, после того, как интерфейс опубликован в системе, и стал доступен для использования, он не должен меняться. Любое изменение в семантике интерфейса ведет к необходимости оявления нового интерфейса.

· Интерфейсы наследуют функциональность от одного базового предка. Все интерфейсы прямо или косвенно являются потомками интерфейса IUnknown. Этот интерфейс обеспечивает базовую функциональность интерфейса, которая включает в себя динамический опрос объекта (dynamic quering) и управление жизненным циклом объекта (lifetime managment) . Эта функциональность обеспечивается тремя методами интерфейса IUnknown: QueryInterface , AddRef и Release . Каждый класс, который реализует интерфейс, должен реализовать эти три метода, наряду с методами, унаследованные от другого интерфейса, и своими собственными методами. Ниже представлено краткое описание функционального назначения упомянутых методов:

- QueryInetrface обеспечивает опрос объекта и доступ к указателю на интерфейс. QueryInerface является первой записью в vtable, и предлагает эффективный путь для определения возможностей объекта, в простейшем случае через этот метод при установлении связи обеспечивается передача указателя на интерфейс IUnknown тому объекту, который пытается получить доступ к данному объекту. Данный метод также делает возможным обновление COM объекта без потерь на обновление остальных зависимых объектов, т.к. объект может быть динамически опрошен клиентами через указатель на IUnknown.

- AddRef и Release находятся на втором и третьем местах в vtable. Это простые счетные функции, которые предоставляются для управления временем жизни объекта. Пока внутренний счетчик объекта, отражающий количества раз вызова AddRef и Release больше нуля (вызов AddRef может увеличивать его значение), объект остается в памяти. Как только значение счетчика достигает нуля, реализация интерфейса может безопасно удалить все зависимые нижележащие объекты. Это функция носит название lifetime managment.

На данный момент времени СОМ применяется практически во всех серьезных для работы программах. [10]

Давайте приведем пример, для более детального и подробного изучения нашей темы. Давайте представим, что пользователю в одной из своих работ придется расположить электронный вид таблицы с расчетными данными, которые имеют ссылки на определенные параметры в тексте. Чтобы выполнить какие либо вычисления не прибегая к технологиям СОМ, приходилось бы постоянно переключаться между двумя программами (Word и Excel), а информацию копировать (вырезать и вставлять). Вот для этого и нужна такая программа, при помощи ее технологий можно применять функции электронной таблицы прямо в текстовом редакторе и автоматически форматировать полученный результат. Возможность реализовать операции такого рода называется автоматизацией.[11]

Цель данной операции состоит в том, чтобы дать возможность программе предоставлять в использование сервисы, которые в ней присутствуют.[12] Основной особенностью и задачей автоматизации является возможность комбинировать функции различных специализированных приложений в одном модуле. СОМ дает возможность программам передавать свою информацию в другие приложения и модули. Если бы каждая программа или приложение-сценарий могли бы поддерживать указатели и процедуру обхода указателей, то проблема была бы решена. Однако в некоторых языках программирования есть определенная трудность с процедурой обхода таблицы указателей. Некоторые из них, например Vіsual Basіc, не поддерживают указатели напрямую. Для решения этой проблемы был разработан специальный интерфейс, который разрешает любым языкам программирования, в том числе таким, как Vіsual Basіc, обращаться к методам COM-компонентов. Этот интерфейс получил название ІDіspatch.

Итак, любая программа, которая предоставляет свои возможности другим приложениям (поддерживает автоматизацию), может делать это через интерфейс ІDіspatch. Интерфейс ІDіspatch происходит от базового интерфейса модели СОМ ІUnknown, тем не менее, в отличие от других COM-интерфейсов, ІDіspatch содержит метод Іnvoke. Его можно использовать для действительного выполнения методов, которые поддерживает COM-объект. Клиент может выполнить любой метод COM-объекта, вызвав метод Іnvoke() интерфейса ІDіspatch. Этот механизм работает при помощи диспинтерфейса (интерфейса диспетчеризации). Диспинтерфейс определяет методы, которые будут доступны благодаря использованию метода Іnvoke() интерфейса ІDіspatch.

Интерфейсы IDispatch можно применять в любой из наиболее распространенных сегодня сред программирования (Visual C++ Studio, Borland Delphi, Borland C++Builder, Visual Basic). Именно этим КОМПАС-Мастер выгодно отличается от КОМПАС-Макро: вам не придется изучать малознакомый язык программирования, вы можете создавать свои приложения в той среде, к которой привыкли.

Свойства COM-объектов

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

В данном разделе, как вы уже могли заметить, мы поговорим с вами, о таком важном моменте, как о Com- объектах. В самом начале нашей исследовательской работы мы рассматривали начальные стадии и ключевые моменты, на которых базируется вся работа данной программы. А сейчас мы более детально рассмотрим, что же представляют собой com- объекты, какие у них свойства, в чем заключается их суть и как же они работают?

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

В данном разделе мы с вами рассмотрели COM- объекты. Дали им характеристику, объяснили принцип работы, обозначили основные элементы работы данного программного обеспечения. Далее мы с вами продолжим рассматривать технологию COM, и раскрывать остальные стороны ее работы.

Свойства COM-технологии

СОМ-серверы

В данной главе мы раскроем сущность свойств, уже знакомой нам, COM- технологии. Раскроем основные аспекты работы данных свойств, их значимость в данной программе. Об этом речь пойдет на протяжении всей главы. Для начала мы поговорим о COM- серверах. Здесь мы обозначим для себя, что значат данные, серверы, и какую роль выполняют? Но чтобы ответить на этот вопрос в полной мере, нам нужно будет дать конкретное определение понятию «COM-СЕРВЕР».

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

Когда клиент запрашивает услугу от СОМ-объекта, он передает СОМ-объекту идентификатор класса (CLSID). CLSID - всего лишь GUID, который применяется при обращении к СОМ-объекту. После передачи CLSID, СОМ-сервер должен обеспечить так называемую фабрику класса (см. следующий раздел), которая создает экземпляры СОМ-объектов. Давайте рассмотрим в общих чертах, какие функции должен выполнять СОМ-сервер:
1. Проводить регистрацию данных в системном реестре Windows для того, чтобы была возможность связать модуль сервера с идентификатором класса (CLSID);
2. Предоставлять фабрику СОМ-класса, создающую копию СОМ-объектов;
3. Осуществлять механизм, который очищает из памяти серверы СОМ, которые в данный момент времени не предоставляют услуг клиентам.
СОМ-объекты представляют собой экземпляры coclass. Отметим еще одну не мало важную деталь- Coclass представляет класс, который поддреживает один или несколько интерфейсов. СОМ-объекты могут осуществлять только те услуги и запросы, которые обозначены в интерфейсах данного вида, а именно coclass. Давайте рассмотрим, как создаются некоторые виды экземпляров.

Экземпляры Cociass создаются при помощи специального типа объекта, называемого фабрикой класса.
Фабрика класса - это специальный СОМ-объект, который поддерживает интерфейс IclassFactory и отвечает за создание экземпляров того класса, с которым ассоциирована данная фабрика класса.
Интерфейс IclassFactory определен в модуле Delphi ActiveX так:
type
IClassFactory = interface (IUnknown)
['{00000001-0000-0000-COOO-000000000046}']
function Createlnstance (const unkOuter: lUnknown; const iid: TIID out obj): HResult; stdcall;
function LockServer (fLock: BOOL): HResult; stdcall;
end;
Как видно из вышеприведенной части кода, интерфейс имеет два метода:
Createlnstance и LockServer.
Метод Createlnstance создает экземпляр СОМ-объекта ассоциированной фабрики класса.
Метод LockServer применяется для хранения СОМ-сервера в памяти. Если параметр метода fLock имеет значение true, то счетчик ссылок сервера увеличивается, иначе - уменьшается. Когда счетчик достигает значения о, сервер выгружается из памяти.
Всякий раз, когда услуги СОМ-объекта запрашиваются клиентом, фабрика класса создает и регистрирует экземпляр объекта для конкретного пользователя. Если услугу того же СОМ-объекта запрашивает другой клиент, фабрика класса создает второй экземпляр объекта для обслуживания второго клиента. coclass должен иметь фабрику класса и идентификатор класса CLSID. Использование CLSID для cociass подразумевает, что они могут быть откорректированы всякий раз, когда в класс вводятся новые интерфейсы. Таким образом, в отличие от DLL, новые интерфейсы могут изменять или добавлять методы, не влияя на старые версии.
Мастер создания СОМ-объектов Delphi самостоятельно заботится о создании фабрики класса.

С использованием СОМ технологии клиент не должен беспокоиться о том, где располагается объект, он просто делает вызов интерфейса данного объекта. Технология СОМ устанавливает все необходимые шаги для того, чтобы сделать этот вызов. Шаги могут отличаться, в зависимости от местонахождения объекта. Объект может иметь место расположения в том же процессе, где и клиент, в другом процессе на том же компьютере, где расположен клиент, или на другом компьютере в сети. Так же существуют различные типы серверов, которые в зависимости от вышеперечисленных факторов применяются. Давайте рассмотрим некоторые из них:
1. В первую очередь сюда мы можем отнести внутренний сервер (In-process server);
2. Следующий у нас будет локальный сервер или, как его еще называют сервер вне процесса (Local server, Out-of-process server);
3. И заключающим у нас выступает удаленный сервер (Remote server). Вот мы вкратце привели примеры использования разных видов серверов, теперь давайте более подробно рассмотрим каждый из них. И обозначим основные их функции, на чем они базируются и, что из себя представляют.
Начнем мы с внутреннего сервера. Здесь мы может сказать, что данный вид сервера представляет собой библиотека DLL, которая запущена в одном процессе вместе с клиентом. Давайте для более подробного рассмотрения данного сервера мы приведем пример. Например, здесь может иметь место элемент управления ActiveX, который внедрен на Web-страницу и просматривается при помощи Internet Explorer или Netscape NavigatorПри этом элемент управления ActiveX загружен на клиентскую машину и находится в том же процессе, что и обозреватель Web. Приложение-клиент связывается с сервером внутри процесса при помощи прямых вызовов СОМ-интерфейса. На рис. 3.3. представлена схема взаимодействия клиента с внутренним сервером.

Рисунок 3.3

Схема, представленная на данном рисунке, показывает взаимодействие клиента с внутренним сервером.
Внутренний СОМ-сервер должен экспортировать четыре функции. Давайте рассмотрим их подробней:
function DllRegisterServer: HResult; stdcall;
function DllUnregisterServer: HResult; stdcall;
function DllGetClassObject (const CLSID, IID: TGUID; var Obj): HResult;
stdcall;
function DllCanUnloadNow: HResult; stdcall;
Все вышеописанные нами функции уже реализованы в модуле comserv, их нужно только добавить в описания exports вашего проекта.
Рассмотрим данные функции более детально:
- DllRegisterServer - применяется для регистрации DLL СОМ-сервера в системном реестре Windows. При регистрации СОМ-класса в системном реестре создается раздел в HKEY_CZASSES_ROOT\CLSID\{XXXXXXXX-XXXX-XXXX-xxxx-xxxxxxxx}, где число, записанное вместо символов х, представляет собой CLSID данного СОМ-класса. Для внутреннего сервера в данном разделе создается дополнительный подраздел inProcserver32. В этом подразделе указывается путь к DLL внутреннего сервера (рис. 3.4).
- DllUnregisterServer - применяется для удаления всех разделов, подразделов и параметров, которые были созданы в системном реестре функцией DllRegisterServer при регистрации DLL СОМ-сервера.
- DllGetclassObject - возвращает фабрику класса для конкретного СОМ-класса.
- DllcanUnloadNow - применяется для определения, можно ли в настоящий момент времени выгрузить DLL СОМ-сервера из памяти. Функция проверяет, есть ли указатели на любой СОМ-объект данной DLL, если есть, то возвращает значение S_FALSE, т. е. DLL выгрузить нельзя. Если ни один СОМ-объект данной DLL не используется, то функция возвращает значение SJTRUE.

Путь к локальному СОМ-серверу в окне редактора системного реестра
Локальный сервер - это приложение ЕХЕ, которое может быть запущено в другом процессе, но на одном компьютере вместе с клиентом. Например, лист электронной таблицы Microsoft Excel связан с документом Microsoft Word. При этом два разных приложения работают на одном компьютере. Локальные серверы используют СОМ для соединения с клиентом.
Когда клиент и сервер находятся в различных приложениях, а также, когда они находятся на разных компьютерах в сети, СОМ использует внутренний (внутрипроцессный) прокси (In-process proxy) для реализации процедуры удаленного вызова. Прокси располагается в одном процессе вместе с клиентом, поэтому, с точки зрения клиента, вызов интерфейсов осуществляется так же, как и в случае, когда клиент и сер'вер находятся внутри одного процесса. Задача прокси заключается в том, чтобы перехватывать вызовы клиента и перенаправлять их туда, где запущен сервер. Механизм, который позволяет клиенту получать доступ к объектам, расположенным в другом адресном пространстве или на другом компьютере, называется маршалинг (marshaling).
Давайте определим основные факторы работы маршалинга:
1. Здесь мы можем указать, что принимать указатель интерфейса из процесса сервера и делать указатель прокси в процессе клиента доступным;
2. Передавать запросы вызовов интерфейса таким образом, как будто они произошли от клиента, и размещать аргументы в процесс удаленного объекта.
Для любого вызова интерфейса клиент помещает аргументы в стек, вызывает необходимую функцию СОМ-объекта через указатель интерфейса. Если вызов объекта произошел не внутри процесса, вызов проходит через прокси. Прокси упаковывает аргументы в пакет маршалинга и передает получившуюся структуру удаленному объекту. Заглушка (stub) объекта распаковывает пакет маршалинга, выбирает аргументы из стека и вызывает необходимую функцию СОМ-объекта.
Так, мы можем сделать вывод, что маршалинг – это некий процесс обработки и сортировки информации, а демаршалинг - процесс подачи информации. Данные процессы имеют прямую связь.

Тип маршалинга зависит от объектной принадлежности СОМ. Объекты могут применять стандартный механизм маршалинга, предоставляемый интерфейсом IDispatch. Стандартный тип маршалинга позволяет устанавливать связь при помощи стандартного системного удаленного вызова процедуры (Remote Procedure Call, RFC).
На рис. 3.5 изображена схема, котрая отображает работу взаимодействия клиента и сервера в случае, когда приложения работают на одном компьютере, но в разных приложениях.

Рисунок 3.5

Рис. 3.5. Схема взаимодействия клиента с сервером в разных процессах на одном компьютере
Локальный СОМ-сервер регистрируется в системном реестре Windows так же, как и внутренний СОМ-сервер.
Удаленный сервер - это библиотека DLL или иное приложение, запущенное на другом компьютере. То есть клиент и сервер работают на разных компьютерах в сети. Например, приложение базы данных, написанное с помощью Delphi, соединяется с сервером на другом компьютере в сети. Удаленный сервер использует распределенные СОМ-интерфейсы (Distributed COM, DCOM) для связи с клиентом.
Удаленный сервер работает также с помощью прокси. Различие в работе между локальным и удаленным сервером заключается в типе используемой межпроцессной связи. В случае локального сервера - это СОМ, а в случае удаленного сервера - DCOM. Схема взаимодействия клиента и удаленного сервера показана на рис. 3.6.

Рисунок 3.6
Рис. 3.6. Схема взаимодействия клиента с сервером на разных компьютерах.

В данном разделе мы рассмотрели свойства COM-сервера, обозначили их основные функции. Привели примеры и подробно их описали. Привели примеры в виде схем, показанных выше. Описали их, дали обозначения. Описали, как может происходить взаимосвязь клиента с сервером.

COM-клиенты. Расширение технологии COM


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

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

Давайте рассмотрим один из самых распространенных видов клиентов. К ним мы можем отнести: СОМ-клиент, который является диспетчером автоматизации (Automation Controller). Диспетчер автоматизации - это одна из частей приложения, которая знает, какой тип информации необходим ему от разных объектов сервера, и она запрашивает данную информацию по мере надобности. [14]
Технология СОМ изначально была разработана, как ядро для осуществления взаимодействия между программами.[15] Уже на одном из этапов разработки предполагалось расширение возможностей технологии при помощи, так называемых расширений СОМ. Вот мы и дошли до расширений нашей программы, о, которой мы говорили еще в самом начале нашего раздела. СОМ имеет возможность расширять собственную функциональность, благодаря тому, что создает специальный наборов интерфейсов для

решения определенных задач.

Вот теперь, когда мы уже знаем, что такое расширение программы COM, мы можем поговорить о видах, которые были разработаны для данного расширения. Что бы было более понятно, мы все данные привели в виде таблицы, которая будет расположена ниже.
Итак, технология ActiveX – это одна из технологий, которая использует компоненты СОМ, особенно элементы управления. Данная технология была создана для того, чтобы работа с элементами управления была более эффективной. Это особенно необходимо при работе с приложениями Internet/Intranet, в которых элементы управления должны быть загружены на компьютер клиента, прежде чем они будут использоваться.
Технология ActiveX - не является единственной расширение СОМ. В табл. 3.2 представлены некоторые из используемых в настоящее время расширений СОМ.
Перечисленные в табл. 3.2 расширения СОМ - это далеко не все из имеющихся. Мы привели более распространенные и использующиеся на данный момент времени. Так же следует отметить тот факт, что постоянно идет доработка старых и создание новых расширений, более совершенных технологий межпрограммного взаимодействия.

Таблица 3.2. Список расширений СОМ

Расширение СОМ

Краткое описание

Серверы автоматизации (Automation servers)

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

Диспетчеры автоматизации или СОМ-клиенты (Automation Controllers, COM Clients)

Диспетчеры автоматизации – представляют собой клиентов серверов автоматизации. Они позволяют разработчику или пользователю писать сценарии для управления серверами автоматизации

Элементы управления ActiveX (ActiveX Controls)

Элементы управления ActiveX предназначены для серверов внутри процесса (in-process COM servers). Элементы ActiveX обычно используются путем встраивания в приложение-клиент

Библиотеки типов (Type Libraries)

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

Страницы активного сервера (Active Server Pages)

Активные серверные страницы- это компоненты ActiveX, которые позволяют вам создавать динамически изменяющиеся Web-страницы

Активные документы (Active Documents)

Активные документы - это объекты, которые поддерживают связывание и внедрение, визуальное редактирование, перенос (drag-and-drop). В качестве примера таких документов можно представить документы Microsoft Word и книги Microsoft Excel

Визуальные межпроцессные объекты (Visual Cross-process Objects)

Визуальные межпроцессные объекты- это визуальные объекты, которыми можно управлять из других процессов


На рис. 3.7 представлена диаграмма, которая показывает связь некоторых расширений СОМ и их связь с технологией СОМ.
Использование СОМ-объектов имеет как преимущества, так и некоторые ограничения. СОМ-объекты могут быть как визуальными, так и невизуальными. Какие-то СОМ-объекты должны быть запущены в одном процессе с клиентом, другие - в разных процессах либо на разных,,компьютерах.
Приведенная ниже табл. 3.3 кратко описывает особенности объектов каждого из вышеприведенных расширений СОМ.

Рисунок 3.7
Рис. 3.7. Технологии, основанные на СОМ

Таблица 3.3. Особенности объектов СОМ

СОМ-объект

Визуаль-ность

Процесс

Связь

Библиотека типов

Активный документ (Active Document)

Обычно визуальный

Внутренний или локальный

OLE

Нет

Автоматизация (Automation)

Может быть как визуальным, так и невизуальным

Внутренний, локальный или удаленный

Автоматический маршалинг при помощи интерфейса

IDispatch

Требуется для автоматического маршалмнга

Элемент управления ActiveX (ActiveX Control)

Обычно визуальный

Внутренний

Автоматический маршалинг при помощи интерфейса

IDispatch

Требуется

Произвольный объект интерфейса

По выбору

Внутренний

Не требуется маршалинг

Рекомендуется

Произвольный объект интерфейса

По выбору

Внутренний, локальный или удаленный

Автоматический маршалинг в зависимости от библиотеки типов, в противном случае-ручной маршалинг

Рекомендуется

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

Диспечертский интерфейс

Диспетчерский интерфейс (dispatch interface) – стандартная специальная реализация интерфейса IDispatch, которую предлагает COM. Данная реализация обеспечивает выполнение процедур позднего связывания (late binding) и маршаллинга. Диспетчерский интерфейс хранит внутри себя таблицу диспетчерских идентификаторов (dispID), каждый из которых является уникальным идентификатором члена интерфейса, и таблица, по сути, реализует отображение соответствующего dispID на имя каждого члена интерфейса. Клиент, желающий получить доступ к ресурсу сервера (к методу или к свойству), должен знать dispID для соответствующего ресурса. Такую информацию можно получить через вызов метода интерфейса IDispatch, который называется GetIDsOfNames, и который является первой записью в vtable для интерфейса IDispatch.[16] Таким образом, клиент получает информацию типах данных, используемых сервером, и получает таблицу диспетчерских идентификаторов, с отображением имени каждого ресурса сервера на соответствующий dispID. Данная операция и со стороны клиента, и со стороны сервера, при использовании стандартной реализации интерфейса IDispatch реализуется автоматически. Эта процедура называется поздним связыванием , т.к. осуществляется на этапе выполнения программы, а не на этапе компиляции.[17] Имея для каждого имени ресурса сервера соответствующий dispID, клиент может осуществить обращение к нему, используя метод интерфейса dispID, который именуется Invoke.[18] Метод Invoke имеет сигнатуру, допускающую вызов с любым количеством параметров, чем обеспечивается его универсальность. Реализация Invoke распаковывает параметры и осуществляет вызов соответствующего метода или свойства и осуществляет контроль над выдачей исключений при выполнении метода или свойства. Когда выполнение метода или обработка свойства заканчивается, возвращаемые значения метода или свойства отправляются обратно клиенту. Если обращение клиента к серверу переходит через границы процесса или машины, то автоматически реализуются все действия по организации маршаллинга. Такая прозрачность является основным достоинством использования интерфейса диспетчеризации.

Основным недостатком диспетчерского интерфейса является ограничение на типы данных, которые можно использовать при передаче параметров. Это следует из необходимости упаковки и распаковки параметров при осуществлении маршаллинга. Допускается использовать 13 стандартных типов данных. На пользовательские типы данных устанавливаются достаточно строгие ограничения. Если требования задачи не укладываются в эти ограничения, разработчик имеет возможность реализовать маршаллиг, путем написания своего proxy/stub кода. Еще одним недостаток проявляется в том, что при компиляции программы не выполняется проверка соответствия типов вызываемых функций, т.к. связывание диспетчерских интерфейсов осуществляется на этапе выполнения программы, и таким образом, не контролируется вызов Invoke с неверным набором аргументов, что вызывает ошибку выполнения.

COM предлагает возможность привязки диспетчерских интерфейсов на этапе компиляции. Если объект описан в библиотеке типов, то dispID может быть прочитан для каждого ресурса объекта, т.к. dispID является для каждого метода или свойства фиксирован, и является частью описания используемых типов данных объекта. Такая процедура называется привязкой идентификаторов (ID bindig). Метод GetIDsOfNames вызывается компилятором во время трансляции программы, таким образом, привязка идентификаторов является формой раннего связывания (early binding). В результате, на этапе выполнения, при первом вызове сервера клиентом, не требуется вызов процедуры привязки интерфейсов, что ускоряет работу. Еще одним достоинством данного подхода является проверка соответствия типов в обращениях к ресурсам сервера.

Расширения COM

OLE/Active document

Документы OLE (OLE/Active documents) – один из набора сервисов, которые предлагает технология OLE. Объекты OLE documents имеют все свойства OLE по связи и внедрению данных, визуального редактирования, поддержки drag-and-drop, активизации по месту (in-place-activation). Используя OLE document можно определить любой количество интерфейсов, через которые обеспечивается стандартное поведения объекта, такое как визуальное редактирования и drag-and-drop.[19] Посредством реализации этих интерфейсов, объекты OLE documents могут быть свободно объединены в единую систему взаимодействующих объектов с разными форматами данных, таких, как звуковые фрагменты, текстовые документы и растровые изображения.[20]

Объект OLE documents может быть реализован как внутренний и внешний COM-сервер.[21] Такой объект состоит из двух частей: визуальной (presentation data), предназначенной для отображения визуальной части объекта и из внутренней части (native data), используемой для редактирования объекта. Объекты OLE documents могут быть контейнерами документов (document container) и серверами документов (document server). Сервер документов обеспечивает функциональность объектов OLE documents. В среде контейнера документов может быть активизирован любой сервер документов.

Automation

Технология автоматизации (automation) предлагает возможность программного управления одного приложения другим. В данной технологии различаются две составные компоненты:

· Клиентская часть, называемая контроллером автоматизации (automation controller);

· Серверная часть, которая носит название объекта автоматизации (automation object) – объект, которым управляет клиент.

Объекты автоматизации могут быть реализованы как внутренние, внешние и удаленные сервера. Технология автоматизации характеризуется двумя положениями:

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

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

Основным достоинством технологии автоматизации является возможность создания объектов, работающих в любом процессном пространстве. Таким образом, вместо создания невизуального OLE-объекта предпочтительнее использовать Automation.

ActiveX control

Технология ActiveX расширяет COM и OLE новыми функциями, специфичными для элементов управления ActiveX (ActiveX control). ActiveX control – визуальные объекты управления, реализуемые как внутренние COM-сервера, и которые включаются в OLE-контейнеры, и работают в их среде. Элементы управления ActiveX не являются законченными приложениями, но представляют собой объект, который решает некоторую частную задачу и может быть встроен в различные приложения. Основными характерными особенностями ActiveX controls является возможность обработки событий, привязки к источникам данных и поддержка лицензирования.

Элементы управления ActiveX особенно широко используются в разработке Web-приложений, где ActiveX controls используются как интерактивные объекты на Web-страницах. По существу, ActiveX становится стандартом, специально направленным на интерактивную часть World Wide Web, например, для просмотра в Web-браузере не гипертекстовых документов, доступ к базам данных и т.д.

Заключение

В данной исследовательской работе нами была рассмотрена технология COM. Мы рассмотрели основные ключевые моменты, на которых базируется данная технология программирования. Рассмотрели все детали, которые входят в данную программу. Так же обозначили все их функции, свойства, рассказали, как они выполняют свою работу, с чем связаны. Так же хотелось бы отметить еще пару немало важных фактов и сказать, но уже в более сжатом виде, что же все - таки есть «COM-технология»?

Технология Com, была разработана и предложена всеми известной корпорацией Microsoft. Она представляет собой один из видов программного обеспечения, который был специально разработан и представлен для повышения уровня надежности при взаимосвязи программных устройств между собой. Так же существуют некие заменители и расширения данной программы, о которых мы уже упоминали ранее. Но среди всех программных обеспечений COM – технология была и остается одной из самых распространенных и более применяемых на сегодняшний день.

Библиография

Цветкова М. С., Великович Л. С., Информатика и ИКТ / Цветкова М. С., Великович Л. С. — Санкт-Петербург, Академия, 2014. - 360 с.

Харламов А. А., Нейросетевая технология представления и обработки информации. Естественное представление знаний. Книга 19 / Харламов А. А. — Москва, Радиотехника, 2016. – 88 с.

Гаврилов, Л.П. Информационные технологии в коммерции: Учебное пособие / Л.П. Гаврилов. - М.: НИЦ ИНФРА-М, 2014. - 238 c.

Гаврилов, М.В. Информатика и информационные технологии: Учебник для бакалавров / М.В. Гаврилов, В.А. Климов; Рецензент Л.В. Кальянов, Н.М. Рыскин. - М.: Юрайт, 2015. - 378 c.

Гаврилов, М.В. Информатика и информационные технологии: Учебник для прикладного бакалавриата / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. - 383 c.

Гаврилов, М.В. Информатика и информационные технологии: Учебник / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. - 383 c.

Голицына, О.Л. Информационные технологии: Учебник / О.Л. Голицына, Н.В. Максимов, Т.Л. Партыка, И.И. Попов. - М.: Форум, ИНФРА-М, 2015. - 608 c.

Гохберг, Г.С. Информационные технологии: Учебник для студ. учрежд. сред. проф. образования / Г.С. Гохберг, А.В. Зафиевский, А.А. Короткин. - М.: ИЦ Академия, 2014. - 208 c.

Максимов, Н.В. Современные информационные технологии: Учебное пособие / Н.В. Максимов, Т.Л. Партыка, И.И. Попов. - М.: Форум, 2015. - 512 c.

Синаторов, С.В. ИКТ: Учебное пособие для средних специальных учебных заведений / С.В. Синаторов. - М.: Дашков и К, 2015. - 456 c.

Хлебников, А.А. Технологии разработки программного обеспечения: Учебник / А.А. Хлебников. - М.: КноРус, 2014. - 472 c.

Архангельский, А.Я. Программирование в Delphi для Windows. Версии 2006, 2007, Turbo Delphi / А.Я. Архангельский. - М.: Бином-Пресс, 2015. - 1248 c.

Архангельский, А.Я. Программирование в Delphi: Учебник по классическим версиям Delphi / А.Я. Архангельский. - М.: Бином-Пресс, 2014. - 816 c.

Фаронов, В.А. Delphi. Программирование на языке высокого уровня / В. Фаронов. - СПб.: Питер, 2015. - 640 c.

Кузан, Д.Я. Программирование Win32 API в Delphi / Д.Я. Кузан. - СПб.: BHV, 2016. - 368 c.

Демидович, Н.Б. Программирование и ЭВМ. Учебное пособие для учащихся / Н.Б. Демидович, В.М. Монахов. - М.: Просвещение, 2014. - 240 c.

Угринович, Н.Д. информатика и информационные технологии / Н.Д. Угринович. - М.: Лаборатория Базовых Знаний, 2014. - 512 c.

Горячев, А.В. Практикум по информационным технологиям / А.В. Горячев, Ю.А. Шафрин. - М.: Бином, 2016. - 272 c.

Федотова, Е.Л. Информационные технологии в науке и образовании: Учебное пособие / Е.Л. Федотова, А.А. Федотов. - М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2015. - 336 c.

Советов, Б.Я. Информационные технологии: учебник для прикладного бакалавриата / Б.Я. Советов, В.В. Цехановский. - Люберцы: Юрайт, 2016. - 263 c.

Коноплева, И.А. Информационные технологии. / И.А. Коноплева, О.А. Хохлова, А.В. Денисов. - М.: Проспект, 2015. - 328 c.

  1. Цветкова М. С., Великович Л. С., Информатика и ИКТ / Цветкова М. С., Великович Л. С. — Санкт-Петербург, Академия, 2014.- С. 310

  2. Харламов А. А., Нейросетевая технология представления и обработки информации. Естественное представление знаний. Книга 19 / Харламов А. А. — Москва, Радиотехника, 2016. – С. 35

  3. Гаврилов, Л.П. Информационные технологии в коммерции: Учебное пособие / Л.П. Гаврилов. - М.: НИЦ ИНФРА-М, 2014. – С. 138

  4. Гаврилов, М.В. Информатика и информационные технологии: Учебник для бакалавров / М.В. Гаврилов, В.А. Климов; Рецензент Л.В. Кальянов, Н.М. Рыскин. - М.: Юрайт, 2015. – С. 115

  5. Гаврилов, М.В. Информатика и информационные технологии: Учебник для прикладного бакалавриата / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. – С. 105

  6. Гаврилов, М.В. Информатика и информационные технологии: Учебник / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. – С. 56

  7. Голицына, О.Л. Информационные технологии: Учебник / О.Л. Голицына, Н.В. Максимов, Т.Л. Партыка, И.И. Попов. - М.: Форум, ИНФРА-М, 2015 – С. 305

  8. Максимов, Н.В. Современные информационные технологии: Учебное пособие / Н.В. Максимов, Т.Л. Партыка, И.И. Попов. - М.: Форум, 2015. – С. 302

  9. Гохберг, Г.С. Информационные технологии: Учебник для студ. учрежд. сред. проф. образования / Г.С. Гохберг, А.В. Зафиевский, А.А. Короткин. - М.: ИЦ Академия, 2014. – С. 45

  10. Синаторов, С.В.ИКТ: Учебное пособие для средних специальных учебных заведений / С.В. Синаторов. - М.: Дашков и К, 2015. – С. 67

  11. Хлебников, А.А. Технологии разработки программного обеспечения: Учебник / А.А. Хлебников. - М.: КноРус, 2014. - 472 c.

  12. Архангельский, А.Я. Программирование в Delphi для Windows. Версии 2006, 2007, Turbo Delphi / А.Я. Архангельский. - М.: Бином-Пресс, 2015. – С. 586

  13. Архангельский, А.Я. Программирование в Delphi: Учебник по классическим версиям Delphi / А.Я. Архангельский. - М.: Бином-Пресс, 2014. – С. 107

  14. Фаронов, В. Delphi. Программирование на языке высокого уровня / В. Фаронов. - СПб.: Питер, 2015.- С. 312

  15. Кузан, Д.Я. Программирование Win32 API в Delphi / Д.Я. Кузан. - СПб.: BHV, 2016. – С. 208

  16. Демидович, Н.Б. Программирование и ЭВМ. Учебное пособие для учащихся / Н.Б. Демидович, В.М. Монахов. - М.: Просвещение, 2014. - 240 c.

  17. Угринович, Н.Д. информатика и информационные технологии: Учебник для 10-11 классов / Н.Д. Угринович. - М.: Лаборатория Базовых Знаний, 2014. –С. 305

  18. Горячев, А.В. Практикум по информационным технологиям / А.В. Горячев, Ю.А. Шафрин. - М.: Бином, 2016. - 272 c.

  19. Федотова, Е.Л. Информационные технологии в науке и образовании: Учебное пособие / Е.Л. Федотова, А.А. Федотов. - М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2015. – С. 205

  20. Советов, Б.Я. Информационные технологии: учебник для прикладного бакалавриата / Б.Я. Советов, В.В. Цехановский. - Люберцы: Юрайт, 2016. –С. 211

  21. Коноплева, И.А. Информационные технологии. / И.А. Коноплева, О.А. Хохлова, А.В. Денисов. - М.: Проспект, 2015. – С. 78