Створення простого com-об’єкта

  • Проектування СОМ-об'єкту
    • Майстри для створення СОМ-об'єктів
    • Створення СОМ-об'єкту з використанням майстра
    • Вибір моделі потоку
Delphi надає програмісту чудові можливості простого створення СОМ-об'єктів. Для цього в середу Delphi були включені майстра (Wizards) для створення різноманітних об'єктів СОМ. У цьому розділі ви дізнаєтеся, як створити простий СОМ-об'єкт за допомогою майстра, а також як зареєструвати створений об'єкт і протестувати його.
СОМ-об'єкт може бути внутрішнім, локальним або віддаленим сервером. Майстер СОМ-об'єктів виконує наступні кроки:
1. Створює новий модуль в поточному проекті.
2. Визначає новий клас, який є прямим нащадком класу TCOMObject і встановлює конструктор фабрики класу.
Для розробника процес створення нового СОМ-об'єкту складається з наступних кроків:
1. Проектування СОМ-об'єкту.
2. Створення СОМ-об'єкту з використанням майстра.
3. Реєстрація СОМ-об'єкту.
4. Тестування СОМ-об'єкту.
Проектування СОМ-об'єкту
При проектуванні СОМ-об'єкту ви повинні чітко уявляти, які СОМ-інтерфейси повинні бути реалізовані. Майстер за замовчуванням надає інтерфейс lunknown. Крім того, ви зобов'язані визначити, який тип сервера ви хочете використовувати: внутрішній, локальний або віддалений. Якщо ви проектуєте внутрішній або локальний СОМ-сервер - ви повинні підключити бібліотеку типів, при цьому маршалинга буде проведений автоматично.
Майстри для створення СОМ-об'єктів
Як уже було відзначено вище, Delphi надає розробнику кілька майстрів для спрощення процесу генерації СОМ-об'єктів. У Delphi є майстри для створення таких об'єктів:
- простого СОМ-об'єкту;
- об'єкта автоматизації;
- елемента управління ActiveX;
- сторінок активного сервера;
- форм ActiveX;
- бібліотек ActiveX;
- сторінок властивостей;
- бібліотек типів;
- об'єктів Microsoft Transaction Server (MTS).
Майстер автоматизує завдання, характерні для створення кожного з перерахованих вище типів СОМ-об'єктів. Майстер забезпечує необхідні інтерфейси для кожного типу об'єкта. Для простого СОМ-об'єкту майстер надає один необхідний СОМ-інтерфейс lunknown, який встановлює покажчик інтерфейсу в об'єкті (рис. 3.8).
Для об'єкта автоматизації майстер створює два інтерфейси: lunknown і IDispatch, останній забезпечує автоматичний маршалинга (рис. 3.9).

Створення простого com-об'єкта

Мал. 3.9. об'єкт автоматизації

Створення простого com-об'єкта

Мал. 3.10. Елемент керування ActiveX
Для елемента керування ActiveX майстер створює всі необхідні для елемента управління інтерфейси, такі як lunknown, IDispatch, IOleobject, Iolecontrol і ін. (Рис. 3.10). Повний список інтерфейсів, використовуваних елементом управління ActiveX, ми розглянемо в розділах 11 і 12.
Отже, різні майстри надають різні інтерфейси. Ви можете вибрати той майстер, який реалізує необхідні для вашого СОМ-об'єкту інтерфейси. Табл. 3.4 показує, які інтерфейси надають різні майстри.
Таблиця 3.4. Інтерфейси, що надаються різними майстрами

Дії, що виконуються майстром

Експортує необхідні програми, які здійснюють реєстрацію сервера, реєстрацію класу, завантаження і вивантаження сервера і примірників об'єкта. Створює і керує фабрикою класу для об'єктів, здійснених в сервері. Вказує СОМ, які потокові моделі використовуються для інтерфейсів об'єкта. Забезпечує бібліотеку типів, якщо вона потрібна

Виконує все описане для майстра СОМ-сервера, крім того, забезпечує інтерфейс користувача і автоматично забезпечує бібліотеку типів

Елемент керування ActiveX

lUnknown, IDispatch, IPersistStreamlnit, IQlelnPlaceActiveObject, IPer sis t Storage, IViewObject, IQleObject, IViewOb j ect2. ZOleControl, IPerPropertyBrowsing, IQlelnPlaceObject, IspecifyPropertyPages

lUnknown, IDispatch, IPersistStreamlnit, lOlelnPlaceActiveObject, IPersistStorage, IViewObject, IQleObject, IViewOb ject2, IQleControl, IPerPropertyBrowsing, IGlelnPlaceObject, IspecifyPropertyPages

Виконує все описане для майстра елемента управління ActiveX, крім того, дозволяє розробнику редагувати додаток


Якщо ви хочете додати власний СОМ-об'єкт, Delphi надає вам таку можливість. Для створення нового інтерфейсу ви повинні створити нащадок інтерфейсу IDispatch і визначити в ньому необхідні методи. Для зміни вже існуючого інтерфейсу вам потрібно створити його прямого нащадка і модифікувати його на свій розсуд. Таким чином, безпосереднє зміна вже існуючих інтерфейсів для розробника недоступно.
Створення СОМ-об'єкту з використанням майстра
Далі перераховані кроки, які потрібно виконати для створення нового СОМ-об'єкту за допомогою майстра:
1. Виберіть в головному меню Delphi пункт File / New (Файл / Новий), при цьому відкриється діалог додавання нових частин проекту (рис. 3.11).
2. Виберіть вкладку ActiveX в даному діалоговому вікні.
3. Двічі клацніть на іконці, що зображає СОМ-об'єкт.

Створення простого com-об'єкта

Мал. 3.11. Діалогове вікно додавання нових частин проекту
В результаті вищеописаних дій, з'явиться вікно майстра СОМ-об'єкту (COM Object Wizard), зображене на рис. 3.12.

Створення простого com-об'єкта

Мал. 3.12. Майстер СОМ-об'єкту
Вікно майстра СОМ-об'єкту містить кілька полів введення і прапорців: - поле Class Name (Ім'я класу) - визначає ім'я нового СОМ-об'єкту;
- поле Instancing (Примірники) - визначає спосіб створення СОМ-об'єкту, дане поле може приймати будь-яке з трьох значень:
? Internal (Внутрішній) - об'єкт може бути створений тільки всередині процесу, зовнішнє додаток не може безпосередньо створювати екземпляри даного об'єкта. Прикладом такого способу створення СОМ-об'єкту може служити текстовий процесор, який може містити в якості об'єкта документ, який буде створюватися тільки шляхом виклику методу даного текстового процесора.
? Single Instance (Одиночний екземпляр) - допускає тільки один СОМ-інтерфейс для кожної програми. Таким чином, коли який-небудь додаток приєднується до об'єкта, об'єкт стає недоступним для інших додатків.
? Multiple Instance (Множинний екземпляр) - об'єкт може бути підключений до декількох додатків. Всякий раз, коли клієнт запитує послуги сервера, створюється новий екземпляр сервера. Наприклад, кожен раз, коли користувач намагається відкрити Windows Explorer, створюється новий екземпляр Провідника.

Примітка
Якщо СОМ-об'єкт використовується тільки всередині процесу, поле Instancing (Примірники) ігнорується.

- поле Threading Model (потокового модель) - визначає, яким чином додатки клієнти можуть викликати інтерфейси даного СОМ-об'єкту;

- поле Implemented Interfaces (Реалізовані інтерфейси) - визначає СОМ-інтерфейси, які повинні бути реалізовані в СОМ-об'єкт;
- поле Description (Опис) - сюди ви можете помістити опис вашого СОМ-об'єкту;
- прапорець Include Type Library (Включати бібліотеку типів) - встановлюється в разі, якщо ви хочете створювати бібліотеку типів для вашого об'єкта. Установка даного прапорця автоматично виробляє установку іншого прапорця Mark interface Oleautomation (Відзначити інтерфейс Oleautomation);
- прапорець Mark interface Oleautomation (Відзначити інтерфейс Oleautomation) - встановлюється для активування коду маршалинга. СОМ знає як здійснювати маршалинга всіх об'єктів, сумісних з сервером автоматизації, і встановлює проксі і заглушки автоматично.
Вибір моделі потоку
При створенні нового СОМ-об'єкту за допомогою майстра вам доведеться вибирати модель потоку. Правильний вибір моделі потоку поліпшить роботу вашого СОМ-об'єкту.
Табл. 3.5 коротко описує моделі потоків, можливі для СОМ-об'єктів.
Таблиця 3.5. Моделі потоків для СОМ-об'єктів


При взаємодії обидві частини СОМ-додатки, клієнт і сервер, повідомляють про підтримуваної ними потокової моделі. СОМ порівнює ці моделі. Якщо обидві частини описують одну потокову модель, СОМ встановлює пряме з'єднання між клієнтом і сервером. Якщо потокові моделі клієнта і сервера розрізняються, СОМ використовує маршалинга для встановлення зв'язку між частинами програми. Застосування маршалинга знижує швидкість виконання роботи, але перевага очевидно: маршалинга забезпечує спільну роботу додатків, що використовують різні потокові моделі.
Передача потокового модель може бути застосована тільки для серверів всередині процесу. Локальні сервери реєструються як додатки ЕХЕ і самостійно забезпечують потокову модель.
У наступних лекціях ми розглянемо на конкретних прикладах процес створення СОМ-об'єктів.

Чи знаєте Ви, що, коли деякі дослідники, які намагаються примирити релятивізм і ефірну фізику, кажуть, наприклад, про те, що космос складається на 70% з "фізичного вакууму", а на 30% - з речовини і поля, то вони впадають в фундаментальне логічне протиріччя. Це протиріччя полягає в наступному.

НОВИНИ ФОРУМУ
Лицарі теорії ефіру