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

Інтерфейс idispatch

Базовий інтерфейс автоматизації (інтерфейс диспетчеризації) називається IDispatch і являє собою COM-інтерфейс, що є спадкоємцем інтерфейсу IUnknown. Відмінність інтерфейсу диспетчеризації від звичайного СОМ-інтерфейсу полягає в способі виклику методів інтерфейсу, які викликаються за допомогою спеціального методу Invoke. Об'єкт автоматизації обов'язково повинен мати додатковий інтерфейс, в якому зазначаються всі методи, доступні через метод Invoke. Кожному методу цього інтерфейсу відповідає ідентифікатор, який називається ідентифікатором диспетчеризації (dispatch identifier, dispid). Реалізація цього методу подібна оператору case: на основі зазначеного ідентифікатор диспетчеризації вибирається метод, який повинен бути виконаний. Завдяки такій організації об'єкту автоматизації потрібно всього одна таблиця віртуальних методів - для інтерфейсу IDispatch. Всі інші методи виклиються за допомогою методу Invoke цього інтерфейсу.

Створення серверів автоматизації в delphi

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

Об'єкт автоматизації в Delphi створюється на основі класу TAutoObject, який є нащадком класу TTypedCOMObject.

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

1. Створення нового додатка-сервера.

2. Створення об'єкта автоматизації.

3. Створення інтерфейсів, а також заголовків методів і властивостей інтерфейсів об'єкта автоматизації.

4. Програмування методів інтерфейсу.

Як бачите, процес створення сервера автоматизації включає ті ж дії, що й процес створення СОМ-сервера.

СТВОРЕННЯ ДОДАТКА-СЕРВЕРА

Додаток-сервер автоматизації являє собою звичайний додаток, що включає в себе, принаймні, один об'єкт автоматизації. Створення такого додатки не має ніяких особливостей. Як і в попередньому випадку, процес створення сервера автоматизації починається з команди File ► New Application головного меню IDE Delphi.

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

Після того як додаток-сервер створено, слід включити в нього новий об'єкт автоматизації. Для цього виберіть команду File ► New, потім у вікні діалогу New Items перейдіть на вкладку ActiveX і клацніть на значку Automation Object (див. рис. 18.1).

Після клацання на кнопці ОК у вікні діалогу New Items проводиться запуск майстра створення об'єкта автоматизації, у вікні якого необхідно задати параметри створюваного об'єкту (рис. 18.7).

Рис. 18.7. Вікно майстра створення об'єкта автоматизації

□ У полі CoClass Name вводиться ім'я класу об'єкта автоматизації (в нашому прикладі назвемо клас TestAuto).

□ У списку Instancing, як і у випадку COM-сервера, вибирається спосіб створення об'єкту автоматизації.

□ У списку Threading Model, як і у випадку COM-сервера, вибирається варіант роботи сервера з потоками.

□ Прапорець Generate event support code визначає, чи повинен створюваний об'єкт автоматизації підтримувати обробки подій.

Після клацання на кнопці ОК у вікні Automation Object Wizard буде створений новий об'єкт автоматизації і відкриється вікно редактора бібліотеки типів. Якщо проглянути текст модуля об'єкта автоматизації (у нашому прикладі назвемо його AutoObjectUnit), то навіть при побіжному погляді видно, що міститься в ньому код не складніше, ніж в модулі «порожнього» СОМ-об'єкту:

unit AutoObjectUnit;

interface

uses

ComObj. ActiveX. AutoServer_TLB. StdVcl; type

TTestAuto = class(TAutoObject. ITestAuto) protected

{ Protected declarations } end:

implementation

uses ComServ:

initialization TAutoObjectFactory.Create(ComServer. TTestAuto.

Class_TestAuto,ciMulti Instance, tmApartment):

end.

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