Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

4.8. Технология применения объектовCom,dcom

Объект COM(ComponentObjectModel) представляет собой объект (EXEилиDLL‑файл) со свои­ми свойствами и ме­то­дами, который рас­прост­­раняется и встраивается (по­до­бно компоненту) в приложение. Об­ъ­ектыDistributedCOM(DCOM) дополнительно обеспечи­ва­ют распре­деленную обработку в сети.

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

Интерфейс COMописывает методы и свойства, доступные клиен­там че­рез ме­­ханизм публикации (регистрации в операционной системе). Ба­зовый интерфейс имеет имяIunknown, и его характеристики насле­дуются интер­фей­сами‑потомками (имена интерфейсов начинаются с «I»). Каждый интер­­фейс имеет уникальный глобальный идентификатор длиной 16 байтов (GUID), а каждый интерфейс в объектеCOMимеет идентифи­ка­тор интерфейсаIIDна основеGUID. Благодаря наличию стандартных ин­тер­­фейсов объектCOMможет быть реализован на любом языке.

Сервер COMпредставляет собой модуль (EXEилиDLL) с програм­мным кодом объектовCOM. При обращении к серверу передается идентифика­торGUIDклассаCLSID. Сервер создает специальный объект (фаб­ри­ку клас­совICLassFactory), который занимается созданием и загруз­кой экзем­пляра нужного объектаCOM.

Клиент COMявляется программой, обращающейся к серве­руCOM.

Примерсоздания объектаCOMс методом умножения двух чисел

Выполним команду File/New/ActiveX/ActiveX Library. Добавим объ­ект COM командой File/New/ActiveX/COM Object и настроим создавае­мый объект (рис. 4.8.1): способ соз­дания объ­екта Multiple instance (соз­да­ние нескольких объ­ек­тов), спо­соб обращения к ин­терфей­су Apartment (для каж­дого объ­ек­та создается по­­­ток), краткое опи­сание ин­тер­­фей­са (Des­crip­tion). После на­жа­тия кноп­ки ОК фор­ми­руются ин­тер­фейс и опи­са­ние класса TMy­Object, и поя­в­ляется окно ре­дактора биб­лиотеки (рис.4.8.2).

Рис. 4.8.1. Окно настройки объекта COM

Окно редактора библиотеки можно вызвать и командой View/Type Library. Левая часть окна содержит дерево объектов, интерфейсов и мето­дов. Выделим строкуImyObject, нажмем кнопкуNew Methodи введем имя соз­даваемого методаGetMulti. Перейдем на страницуParametersи кноп­койAddвведем два параметра и укажем их имена и типы (рис. 4.8.2).

Рис. 4.8.2. Задание параметров метода GetMulti в интерфейсе объекта COM

КнопкойNew Propertyможно создать новые свойства объекта. Нажмем кнопкуRefreshдля обновления реализации.

Перейдем в модуль Unit1 и заполним тело метода кодом:

function TMyObject.GetMulti(X, Y: Single): Single; begin Result:=X*Y; end;

Перейдем в редактор библиотеки и нажмем кнопку Register. В результате выполняется компиляция, создается модульProject_TLB.Pas, биб­лиоте­каProject1.DLLи содержащийся в ней серверCOMрегист­рируется в системе. Закроем проект.

Для отладки объектаCOMсоздадим новый проект (клиентCOM) в другой папке (рис. 4.8.3).

Рис. 4.8.3. Окно проверки работы метода GetMulti объекта COM MyObject

Откорректируем модуль Unit1. В строкуUsesдобавим модульPro­ject1_TLBс описанием интерфейса. В подразделеPublicразделаTypeобъ­явим глобальные переменные:UkazIUnknown,UkazIMyObject:IMyObject.

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

procedure TForm1.FormCreate(Sender: TObject);

begin// создание подклассаCoс описанием общего интерфейсаIUnknown

UkazIUnknown:=CoMyObject.Create; //указатель интерфейсаIUnknown

// формирование указателя на интерфейс IMyObject

UkazIUnknown.QueryInterface(IMyObject,UkazIMyObject);end;

Составим процедуру нажатия кнопки Перемножить.

procedure TForm1.Button1Click(Sender: TObject);

begin Label1.Caption:= FloatToStr (UkazIMyObject.GetMulti (StrToFloat (Edit1.Text), StrToFloat(Edit2.Text))); end;

Выполним приложение.