Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тотосько 31-45.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
678.4 Кб
Скачать

Примітка

У даному прикладі при створенні об'єкта автоматизації не була включена підтримка обробки подій. Програмування подій в деякій мірі ускладнює код модуля об'єкта автоматизації і являє собою нетривіальну задачу, але зважаючи обмеженого обсягу книги дані питання тут не розглядаються.

Код бібліотеки типів новоствореного об'єкта автоматизації, на відміну від СОМ-об'єкту, включає опис декількох інтерфейсів:

unit AutoServer_TLB;

{STYPEDADDRESS OFF}

uses Windows, ActiveX. Classes, Graphics, OleServer,

OleCtrls. StdVCL;

const

AutoServerMajorVersion = 1;

AutoServerMinorVersion = 0;

LIBID_AutoServer: TGUID - '{62D7BF80-A76C-11D4-A8C1- 0060520799ВЕ} ’;

IID_ITestAuto: TGUID = '{62D7BF81-A76C-11D4-A8C1- 0060520799BE}';

CLASS_TestAuto: TGUID = 1{62D7BF85-A76C-11D4-A8C1- 0060520799BE}':

type

ITestAuto = interface;

ITestAutoDisp = dispinterface:

TestAuto - ITestAuto;

ITestAuto = interface(IDispatch)

['{62D7BF81-A76C-11D4-A8C1-0060520799BE}'] end;

ITestAutoDisp = dispinterface

['{62D7BF81-A76C-11D4-A8C1-0060520799BE}' ]

end;

CoTestAuto = class class function Create: ITestAuto; class function CreateRemote(const MachineName: string): ITestAuto; end;

implementation

uses ComObj;

class function CoTestAuto.Create: ITestAuto; begin

Result := CreateComObject(CLASS_TestAuto) as ITestAuto: end;

class function CoTestAuto'.CreateRemote(const MachineName: string): ITestAuto; begin

Result := CreateRemoteComObject(MachineName.

CLASS_TestAuto) as ITestAuto:

end:

end.

Інтерфейс ITestAuto називається дуальним і призначений для роботи з об'єктом TTestAuto.

ПРИМІТКА

Дуальні інтерфейси є спадкоємцями інтерфейсу IDispatch і забезпечує як зв'язування з об'єктом під час компіляції (раннє зв'язування через таблицю віртуальних методів), так і пізніше зв'язування, використовуване в технології автоматизації.

Інтерфейс диспетчеризації ITestAutoDisp забезпечує взаємодію з об'єктивним на основі технології автоматизації.

СТВОРЕННЯ ІНТЕРФЕЙСІВ І МЕТОДІВ ОБ'ЄКТУ АВТОМАТИЗАЦІЇ

Так само як і при розробці COM-об'єкта, інтерфейси і методи об'єкта автоматизації створюються за допомогою редактора бібліотеки типів. Для спрощення приклада створимо тільки один інтерфейс, який буде містити методи обчислення середнього значення і дисперсії. Слід зазначити, що створення методів інтерфейсу для об'єкта автоматизації має одну особливість, яка полягає в тому, що результат, що повертається функцією, може мати тільки тип HRESULT. У цьому випадку метод є процедурою, тому для передачі розрахованого значення в клієнтський додаток слід використовувати параметр виклику процедури.

Таким чином, у нашому прикладі при виклику методу потрібні два параметри: перший використовується для передачі даних об'єкту автоматизації, а другий - для отримання результату від об'єкта автоматизації. Створення нового методу інтерфейсу і зміна його імені провадиться точно так само, як і при розробці COM-об'єкта. Тип результату НRESULT присвоюється методом за замовчуванням, тому зазвичай змінювати значення в списку Return Туре не потрібно. Створення першого параметра методу також повністю аналогічно прикладу для СОМ-об'єкту. А ось завдання другого параметра має особливості, пов'язані з тим, що через цей параметр об'єкт автоматизації повертає результат клієнтського додатку. Тому даний параметр повинен передаватися по посиланню, а не по значенню, і мати атрибут out. Щоб вказати, що параметр передається по посиланню, потрібно просто додати символ зірочки (*) до імені типу параметра в стовпці Туре списку Parameters (мал. 18.8).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]