Чтобы получить дополнительную информацию по данной теме смотрите The
Component Object Model: A Technical Overview,
http//premium.microsoft.com/msdn/library/techart/F365/F36C/F380/D390/S8B5B.HTM.
Также смотрите ежедневные обновления по программам, ресурсам и событиям для
разработчиков по http//premium.microsoft.com/msdn
Рисунки:
Сервисы компонентов Распределенные сервисы
COM+ (1998)
Более развитые сервисы времени выполнения и сервисы для всех языков
Java VM (1997) IIS 4.0/MTS 2.0 (1997)
«Прозрачная» COM для Java Транзакционная Web, возможность взаимодействия
ATL (1996) MTS (1996)
«Прозрачная» COM для C++ Транзакции, слежение
Visual Basic 4.0 (1995) DCOM (1996)
«Прозрачная» COM для Visual Basic Удаленный доступ, защита
COM (1992)
Рис. 1. Эволюция COM
С COM
Фабрика классов
Реестр DLL
Подсчет ссылок
Query Interface
IDispatch
Точки соединения
Информация о типе
Методы
С COM+
Фабрика классов
Реестр DLL
Подсчет ссылок
Query Interface
IDispatch
Точки соединения
Метаданные
Методы
Красный шрифт - пишите вы Синий - система обеспечивает реализации. по умолчанию
Рис. 2. Создание компонентов
Клиенты Компоненты
Связки языка/объектные библиотеки
Перехватчик 1 Перехватчик 2
(сторонний) (сторонний)
{вертикальная колонка:}
Системный перехватчик
Связывание данных
Транзакции
{горизонтальные столбцы:}
Сервис периода выполнения COM+
Загрузчик классов
Объектная среда выполнения
Служба регистрации
API компилятора
COM
Операционная система
{бледно-зеленое} Сервисы COM+ {темно-зеленое} сервисы времени выполнения COM+
Рис. 3. Архитектура COM+
Исходный текст Компилятор (C++, Visual Basic и т.д.)
CO Class Foo {
.
.
.
}
Интерфейсы компилятора Метаданные класса Foo Двоичный класс Foo
Компоновщик
Пакет Foo
Файл Инструмент сервис времени выполнения COM+
Рис. 4. Создание компонента
Клиент
Запуск
X=conew Foo;
Таблица классов
Метаданные
сервис времени выполнения COM+
CorInitialize
CorLoad
GCT Класс
CoNew
Объект
Переходник
- Код запуска инициализирует сервис периода выполнения
- Загрузка классов
- Загрузчик использует клиентскую таблицу классов для загрузки определений классов
- Строится глобальная таблица классов (GCT) для описания классов
- Клиенты запрашивают сервисы периода выполнения для создания объекта
- Сервис периода выполнения ищет в GCT описание класса
- Сервис периода выполнения устанавливает местонахождение объекта и инициализирует его
- Обратно клиенту передается ссылка на объект
Рис. 5. Загрузка классов и создание объектов