- •Розподілені системи обробки інформації
- •Передмова
- •Розділ 1. Огляд компонентних технологій створення розподілених програмних систем
- •1.1. Узагальнена архітектура і механізм функціонування об'єктних розподілених систем
- •1.2. Основні приклади технологій створення розподілених систем
- •1.3. Переваги використання розподілених технологій
- •Розділ 2. Розроблення розподілених систем на основі модели com/dcom у Delphi
- •2.1. Використання dll у Delphi
- •2.1.1. Поняття dll
- •2.1.2. Створення dll у середовищі Delphi (експорт)
- •2.1.3. Використання dll у Delphi (імпорт)
- •2.1.4. Створення динамічних бібліотек для редагування ресурсів
- •2.2. Основи сом-технології
- •2.2.1. Загальний опис
- •2.2.2. Базові поняття
- •2.2.3. Бібліотека сом
- •2.2.4. Бібліотека типів
- •2.3.2. Сервер сом у Delphi
- •2.3.3. Бібліотека типів у delphі
- •2.4. Створення системи клієнт-сервер на основі базового com-об’єкту у складі внутрішнього сервера
- •2.4.1. Створення сом-сервера
- •2.4.2. Створення сом-клієнта
- •2.4.3. Використання сом-об’єкту в клієнтській програмі
- •2.5. Механізм міжпроцесного обміну
- •2.6. Створення систем клієнт-сервер на основі зовнішнього базового сом-об’єкту
- •2.6.1. Основні поняття
- •2.6.2. Засоби організації потокової взаємодії клієнта і сервера
- •2.6.3. Методи формування екземпляра сом-об’єкту
- •2.6.4. Формування екземпляра зовнішнього сом-об’єкту
- •2.6.5. Створення сом-сервера
- •2.6.6. Створення сом-клієнта
- •2.7. Автоматизація
- •Створення сервера автоматизації;
- •2.7.1. Базові поняття
- •2.7.2. Сервер автоматизації
- •2.7.3. Контролер автоматизації
- •2.8. Створення системи клієнт-сервер на основі внутрішнього сервера автоматизації
- •2.8.1. Об'єкт автоматизації. Клас tAutoObject
- •2.8.2. Вбудований сервер автоматизації
- •2.8.3. Створення клієнта автоматизації
- •2.9. Зовнішній сервер автоматизації
- •2.9.1. Основні визначення
- •2.9.2. Виконання маршалінгу з рядками, шрифтами і зображеннями
- •2.9.3. Перетворення наявного застосунка в сом-сервер автоматизації
- •2.9.4. Створення клієнта автоматизації
- •2.10. Події в сом і зворотні виклики на основі інтерфейсів диспетчирування
- •2.10.1. Створення сервера автоматизації
- •3. Формування бібліотеки типів
- •4. Формування методів
- •5. Реєстрація сервера
- •2.10.2. Створення клієнтського застосунка
- •2.10.3. Підключення множини клієнтів до сервера
- •2.11. Інтерфейси зі зворотним викликом
- •2.11.1. Створення сервера
- •2.11.2. Створення клієнтського застосунка
- •2.12. Технологія ActiveХ
- •2.12.1. Використання готових елементів АctiveХ
- •2.12.2. Розроблення власних елементів АctiveХ
- •2.12.3. Поширення елементів керування ActiveХ і форм ActiveХForm у Web-середовище
- •2.14. Dcom технологія
- •2.14.1. Загальна схема взаємодії сом-клієнта і сом-сервера
- •2.14.2. Розроблення системи «клієнт-віддалений сом-сервер»
- •Розділ 3. Проектування розподілених систем на платформі Microsoft .Net
- •3.1.1. Здійсненя викликань з типів .Net до типів сом
- •3.1.2. Звернення клієнта сом до збірки .Net
- •3.2. Об’єктно-орієнтована архітектура .Net Remotіng – основа створення розподілених систем Mіcrosoft .Net.
- •3.2.1. Створення системи клієнт-сервер на основі технології Remoting
- •Розділ 4. Створення системи "клієнт - сервер" на основі технології corba
- •4.1. Загальні теоретичні відомості
- •4.2. Створення серверного застосунка
- •1. Створення файла опису інтерфейсу
- •Викликання конструктора створення corba сервера
- •Формуємо модуль Unit1
- •Формуємо реалізацію методу
- •4.3. Створення клієнтського застосунка
- •Викликання конструктора corba-клієнта
- •2. Формування форми
- •3. Запуск застосунка
- •Приклад програмних кодів сервера
- •4.4. Порівняльний аналіз технологій сом і соrва
- •4.4.1. Основні принципи об'єктних моделей
- •4.4.2. Об'єктні моделі
- •4.4.3. Підтримка операційних систем
- •4.4.4. Формальний опис архітектури і проблеми реалізації
- •4.4.5. Підсумки порівняння
- •Літературні джерела
2.2.3. Бібліотека сом
Для забезпечення виконання загальних функцій і базових інтерфейсів в операційній системі встановлюється спеціальна бібліотека СОМ (конкретна реалізація може бути різною). Доступ до функцій бібліотеки здійснюється стандартним способом, а не через інтерфейс. Згідно зі специфікацією, імена всіх бібліотечних функцій починаються з префікса “Co".
При встановленні застосунку, що використовує СОМ, відбувається реєстрація СОМ, тобто в системний реєстр записується інформація про всі СОМ-об'єкти, що містяться у цьому застосунку, а саме:
-
ідентифікатор класу (Class Identifier, CLSID), який однозначно визначає клас об’єкту;
-
тип сервера: внутрішній, локальний або віддалений;
-
для локальних і внутрішніх серверів зберігається повне ім'я DLL-бібліотеки або EXE-файла;
-
для віддалених серверів записується повна мережева адреса.
У разі, коли клієнт намагається використати деякий об'єкт СОМ перший раз, він звертається до бібліотеки СОМ і викликає метод CoCreateInstance, передаючи йому параметр CLSID потрібного класу, IID інтерфейсу і необхідний тип сервера.
Бібліотека за допомогою диспетчера керування службами (Service Control Manager, SCM) звертається до системного реєстру, за ідентифікатором класу знаходить інформацію про сервер і запускає його. Сервер створює примірник класу, тобто СОМ-об'єкт, і повертає бібліотеці вказівник на запитаний інтерфейс.
Бібліотека СОМ передає вказівник клієнту, який надалі може звертатися безпосередньо до об'єкту.
Фабрика класу. Для створення примірника класу, тобто СОМ-об’єкту, використовується спеціальний інтерфейс IСlassFactory. У ньому реалізовано усього два методи:
-
CoCreateInstance − створює новий примірник класу; всі необхідні параметри, крім IID, метод отримує від фабрики класу; у цьому його відмінність від однойменного загального методу бібліотеки;
-
LockServer – залишає сервер функціонувати після створення об'єкту.
Об’єкт, який включає інтерфейс IСlassFactory, називається фабрикою класу.
Для виклику фабрики класу існує спеціальний загальний метод CoGetClassObject. Як параметр йому передається CLSID потрібного класу й IID інтерфейсу (IClassFactory). Метод шукає необхідну фабрику і повертає вказівник на інтерфейс. За його допомогою і використовуючи метод CoCreateInstance, клієнт примушує фабрику класу створити об'єкт (рис.2.3).
2.2.4. Бібліотека типів
Щоб документувати інтерфейси об'єкту для користувачів, розробник створює інформацію про типи об'єкту. Для цього використовується мова IDL. Вся інформація об'єднується у спеціальній бібліотеці типів. Вона може описувати властивості і методи (а також їх параметри) інтерфейсів і містити відомості про необхідні заглушки і заступників. Інформація про окремий інтерфейс оформляється у вигляді об’єкту всередині бібліотеки.
Для створення бібліотеки типів, описаної за допомогою операторів IDL, використовуються спеціальні компілятори. Доступ до бібліотеки здійснюється за CLSID класу об’єкту. Крім того, бібліотека має власний GUID, який зберігається в системному реєстрі при реєстрації об’єкту. Для доступу до бібліотеки за GUID використовується загальний метод LoadRegTypeLib. Якщо клієнту відоме ім'я файла бібліотеки, то можна скористатися методом LoadTypeLib.
Кожна бібліотека типів має інтерфейс ITypeLib, який працює з нею, як єдиним об'єктом. Для доступу до інформації про окремий інтерфейс використовується інтерфейс ITypeInfo.
Контрольні запитання та завдання:
-
Дайте визначення технології СОМ?
-
Що таке інтерфейс?
-
Що таке СОМ-об’єкт?
-
Що таке СОМ-сервер?
-
Який склад інтерфейса IUnknown?
-
Опишіть механізм викликання методу об’єкту СОМ клієнтом.
-
Що таке бібліотека СОМ і для чого використовуються її функції?
-
Що таке бібліотека типів?
-
Для чого використовується мова IDL?
2.3. СОМ у Delphi
2.3.1. Об'єкт СОМ у Delphi
Об'єкт СОМ описується звичайним класом TComObject, який породжений безпосередньо від TObject. Всі властивості і методи, що реалізують призначення об’єкту, оголошуються і описуються в його оголошенні. Тому сам клас нового об’єкту СОМ принципово ні чим не відрізняється від будь-якого іншого.
При створенні об’єкту СОМ з ним зв'язується ще один клас, який описує всі інтерфейси. Цей клас має загальну назву CoClass, а ім’я Co-класу для реального об’єкту створюється з імені класу, визначеного розробником СОМ-об’єкту, з додаванням префіксу Co. CoClass об'єднує всю інформацію про типи. Ця інформація подана в бібліотеці типів Co-класу. CoClass є надбудовою або оболонкою цього коду, він забезпечує представлення примірника об’єкту відповідно до специфікації СОМ і гарантує, що звернення клієнта до об’єкту буде оброблене коректно.
Клас TComObject в сукупності з екземпляром CoClass, що створюється для кожного об’єкту, повністю відображають СОМ-об'єкт. Він може підтримувати довільне число інтерфейсів і включає інтерфейс IUnknown.
Крім цього базового інтерфейсу визначені численні інтерфейси, які забезпечують функціонування інших технологій на основі СОМ (наприклад, IDispatch для технології Automation) і полегшують працю розробників.
Для забезпечення роботи об’єкту СОМ з бібліотекою типів від базового класу TComObject породжений новий клас TTypedComObject. Додатково він має ще один інтерфейс − IProvideClassInfo. Якщо цей інтерфейс має доступ до бібліотеки типів, то для отримання нової інформації про об'єкт досить знати його ідентифікатор класу. Цей клас використовується для створення об'єктів з використанням бібліотеки типів.
При створенні об'єктів СОМ у Delphi розробник не повинен піклуватися про створення фабрики класу для кожного об’єкту, тому що спільно з об'єктом створює не тільки CoClass, але і фабрику класу – спеціалізований об'єкт СОМ, який володіє інтерфейсом IClassFactory і використовується для створення об'єктів СОМ.
Клас TСomObjectFactory інкапсулює функції універсальної фабрики класу для об'єктів СОМ, що створюються як примірники класу TComObject. Конструктор фабрики описується в секції ініціалізації модуля, що включає відповідний сервер.
Дерево класів, які забезпечують роботу з СОМ-об’єктом у Delphi, наведене на рис. 2.4.