Кратко о технологии com

Обновлено: 02.07.2024

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

Таблица 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), - который занимается непосредственно созданием и загрузкой (производством) экземпляра нужного объекта СОМ, выполняющего конкретные действия его интерфейса, указанные в запросе клиента СОМ.

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

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

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

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

Ход работы

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

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


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

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




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


.


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






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


Составные части технологии 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), - который занимается непосредственно созданием и загрузкой (производством) экземпляра нужного объекта СОМ, выполняющего конкретные действия его интерфейса, указанные в запросе клиента СОМ.

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

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

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

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

Ход работы

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

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


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

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

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


.


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






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

Модель COM — это независимая от платформы, распределенная объектно-ориентированная система для создания двоичных компонентов программного обеспечения, которые могут взаимодействовать. COM — это базовая технология для Microsoft OLE (составных документов), ActiveX (компоненты с поддержкой интернета), а также другие.

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

Единственное требование к языку для COM заключается в том, что код создается на языке, который может создавать структуры указателей, явно или неявно, вызывайте функции с помощью указателей. Объектно-ориентированные языки, такие как C++ и Smalltalk, предоставляют механизмы программирования, упрощающие реализацию COM-объектов, но такие языки, как C, Java и VBScript, можно использовать для создания и использования COM-объектов.

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

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

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

Шаблон:Нет сносок COM ( Шаблон:Lang-en — объектная модель компонентов; произносится как [ком]) — это Microsoft, предназначенный для создания объектно-ориентированного программирования . Стандарт COM мог бы быть универсальным и платформо-независимым, но закрепился в основном на операционных системах семейства Microsoft Windows . В современных версиях Windows COM используется очень широко. На основе COM были реализованы технологии: ActiveX , DCOM, COM+, DirectX, а также XPCOM .

Содержание

История COM [ ]

Стандарт COM был разработан в OLE . Технология OLE 1.0 уже позволяла создавать т. н. « Шаблон:Lang-en ): например, в пакете Microsoft Office эта технология позволяла включать диаграммы Microsoft Excel в документы Microsoft Word.

Путаница в названиях [ ]

Некоторая путаница между понятиями OLE и ActiveX сохраняется и до сих пор, но речь идёт об одних и тех же COM-технологиях. Причём иногда даже путают понятия OLE и COM. Так, внедряемые OLE-объекты иногда называют COM-объектами, а OLE-контейнеры — COM-контейнерами, и т. п.

Принципы работы COM [ ]

Технологии, основанные на стандарте COM [ ]

Выпущенная в Шаблон:Lang-en — распределённая COM) основана на технологии CORBA .

Как DCOM, так и CORBA решают задачу вызова метода объекта, расположенного на другой машине, а также передачу ссылки на объект с одной машины на другую.

Сетевой уровень DCOM называется ORPC (Object RPC) и является объектно-ориентированным расширением DCE RPC.

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

Microsoft Transaction Server был включен в Option Pack для Windows NT4 еще в 1997 году.

MTS/COM+ использовался внутри ряда версий веб-сервера MS ISAPI , так и скриптовых по технологии ASP (сама asp.dll есть ISAPI-приложение).

DCOM через интернет и решение проблемы XP SP2 [ ]

В 2009 году DComLab опубликовал коммерческий продукт ComBridge. При использовании ComBridge для работы по DCOM через интернет не требуется CIS, не используется 135 порт, в локальной сети не требуются настройки dcomcnfg. ComBridge встраивается в транспортный уровень DCOM, полностью выделяя весь трафик созданного объекта и всех полученных из него объектов в отдельный поток.

Архив статей "Что такое "технология COM"

Уместные применения технологии COM; DLL и EXE как места обитания COM-объектов; сокрытие know how; распределенное приложение; кроссплатформенная совместимость; изменение масштаба проекта в процессе проектирования;

COM - сложная, неполная и замкнутая технология; сравнение COM и CORBA; об OLE и ПиВО; от OLE к OLE Automation и далее к COM, ActiveX, OLE DB, MTS и COM+

Понятия "процесса", "потока" и "адресного пространства"; концепция архитектуры "клиент-сервер"

Абстракция объекта; концепция взаимодействующих объектов и её возможная архитектура; динамическая компоновка "пойди туда, не знаю куда"; сценарий взаимодействия объектов;

Философия взаимодействия объектов; стоимость и меры ее измерения; является ли стоимость препятствием и где на самом деле оно расположено;

Объекты и статические типы; проблема вселенской уникальности имён; что в имени тебе моём?; машинный алгоритм или людская организация?; UUID и GUID; форма записи GUID; программы-генераторы uuidgen и guidgen;

Служба системного реестра; иерархическая база данных; графический редактор реестра; части, разделы и параметры реестра; regedit.exe

Главный раздел системного реестра, используемый COM; набор информации связанной с GUID; ссылка на модуль сервера

Cтроение DLL; таблицы EXPORTS и IMPORTS; утилита dumpbin.exe; функции DllGetClassObject и CoCreateInstance

Концепция интерфейса; спецификация взаимодействия - самостоятельная сущность; отличия интерфейса и протокола; объекты и интерфейсы

Организационно-методические вопросы; языки примеров; технические средства, используемые в цикле статей; литература; отличие данной рассылки от других источников информации

Абстрактный класс и статический тип; сокрытие инфраструктуры объекта; разбиение проекта на единицы независимой компиляции; недостаточность аппарата абстрактных классов

Разделение функциональности между клиентом и сервером; трудности идентификации статического типа и интерфейса; идентификация парой "статический тип - интерфейс"; виртуальные абстрактные классы

Анатомия двоичных структур модуля; как работает компилятор; как выглядит клиент-серверное взаимодействие "глазами процессора"; двоичные структуры, соответствующие виртуальному абстрактному классу

Примитивный, но работающий пример реализации изложенных принципов; реализация DLL-протосервера и вызов ее EXE-протоклиентом; пример действительно компонентной архитектуры "до COM"

Особенности архитектурного решения клиент-серверного взаимодействия; достаточность предложенного решения для взаимодействия с объектом, но недостаточность его для управления объектом

Возможное решение проблемы управления объектом в контексте сервера; необходимые и достаточные для управления функции; как реализовать такую функциональность

Оформление базовой функциональности COM-объекта в виде интерфейса; отдельный интерфейс или добавка к другому интерфейсу? интерфейс IUnknown как база любого интерфейса

Какие проблемы подстрегают COM-программиста в процессе компонентного конструирования; точная спецификация элементов и конструкций языка, применяемых для описания интерфейса

Спецификация интерфейса IUnknown и реализация его методов

Работающий пример "настоящих COM-объектов" и их взаимодействия с клиентом; исследование управления временем жизни объекта посредством методов интерфейса IUnknown

Анализ примера настоящих COM-объектов и их взаимодействия; затраты на соблюдение протокола взаимодействия; особенности конструкции

Понятие COM-сервера; классификация серверов; взаимно проникающие программные архитектуры; проблемы, встающие преед сервером; состав экспортируемых функций inproc-сервера

Представление о составе регистрационной информации, которую должен обеспечить сервер при саморегистрации;

Способы регистрации сервера в реестре, средства, какими это может быть сделано и какой ценой

DllCanUnloadNow и её реализация, алгоритм выгрузки inproc-сервера, "призрачная" функция DllRegisterServerEx

Пример "настоящего" COM-сервера; исследование взаимодействия частей COM на разных этапах; утилита regsvr32.exe

Некоторые тонкости клиента и сервера из предыдущего примера; системная функция CoGetClassObject; контекст запуска сервера

Существование в составе "объекта" динамической и статической частей; два разных интерфейса IUnknown, реализуемые объектом

Трактат "о терминологии" два разных интерфейса IUnknown, как артефакты реализации, а не модели; три уровня рассмотрения ООП

Концепция "фабрики класса"; две разных интерпретации этой концепции; статические и нестатические аспекты COM-типа; конструктор COM-объекта;

Интерфейс IClassFactory; реализация методов этого интерфейса; "конструктор по умолчанию" COM-объекта; последовательность действий клиента для получения экземпляра;

Интерфейс IClassFactory2; протокол взаимодействия IClassFactory2/IClassFactory; ключ лицензии; последовательность действий клиента для получения лицензированног экземпляра;

Условные графические обозначения, принятые в COM; статические и нестатическее аспекты типа в этих обозначениях; коммунальность COM

Ответы на письма читателей

Пример реализации статических и нестатических аспектов типа; настоящий COM-сервер c настоящими COM-объектами; функция API CoCreateInstance

Понятия "потока", "процесса", "изолированного адресного пространства". Проблемы, которые они вызывают при организации взаимодействия компонентов

Изолированное адресное пространство; реализация этой концепции в Win32; причины возникновения "виртуальной памяти"

Поток и процесс;Многопоточное программирование в Win32; синхронизаторы; COM и синхронизация потоков

Эмуляция вызова локальной процедуры; Передача управления в другой поток в другом процессе; Синхронизация потоков клиента и сервера

Разделение компонентов между процессами; Компоненты-заместители; proxy и stub и их реализация; "Основная теорема алгебры" COM

Три стороны одного, центрального для COM явления; Библиотека типов; Язык IDL и абстрактное описание интерфейсов; Компилятор MIDL; Утилита Oleview;

Ошибки в COM; Два рода ошибок; Архитектурные замечания о перехвате исключений внутри сервера; О механизме передачи ошибки от сервера клиенту; Объект с интерфейсом IErrorInfo;

Ошибки "второго рода"; Структурность кода ошибки; типы данных SCODE и HRESULT; составные части кода ошибки в COM; Код ошибки, как видимое проявление целой подсистемы;

Ошибки "первого рода"; механизм передачи этих ошибок; философия трансформации абстракции ошибки; интерфейсы IErrorInfo, ICreateErrorInfo и ISupportErrorInfo;

Наследование в COM; наследование поведения; наследование реализации и наследованеи интерфейса; философия наследования; агрегирование и включение;

Читайте также: