Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Роджерсон Д. - Основы COM - 2000.pdf
Скачиваний:
411
Добавлен:
13.08.2013
Размер:
2.4 Mб
Скачать

223

экрана и палитру. Tangram*World поддерживает три интерфейса: ITangramWorld, ITangram*World и ITangramCanvas.

ITangramWorld

Клиентский EXE-модуль управляет компонентом Tangram*World через универсальный интерфейс ITangramWorld. Клиентский EXE очень мало взаимодействует с Tangram*Visual, предпочитая общаться с

Tangram*World и предоставляя ему работать с Tangram*Visual.

Интерфейсы ITangramGdiWorld и ITangramGLWorld

Эти интерфейсы используются компонентами Tangram*Visual для взаимодействия с соответствующим Tangram*World. Обратные указатели от компонентов к клиентам — очень мощное средство, но они могут создать циклические ссылки; в результате счетчик ссылок компонента может никогда не уменьшиться до 0 и, таким образом, компонент может никогда не удалиться из памяти. Мы рассмотрим этот вопрос далее в разделе «Циклический подсчет ссылок».

Интерфейс ITangramCanvas

Клиентский EXE делегирует интерфейсу ITangramCanvas компонента Tangram*World решение всех вопросов, связанных с дисплеем, включая вывод и обновление изображение на экране, а также работу с палитрой. Но хотя этот интерфейс поддерживается и TangramGdiWorld, и TangramGLWorld, ни один из них его не реализует. Вместо этого они агрегируют компонент TangramCanvas, который и реализует интерфейс.

Что демонстрирует пример

Как я говорил выше, Tangram демонстрирует большинство представленных в книге технологий. Я кратко поясню, что здесь наиболее интересно.

Агрегирование

Tangram*World агрегирует TangramCanvas, чтоб предоставить клиентскому EXE реализацию ITangramCanvas.

Включение

Включение широко используется в программе Tangram. Как видно на рис. 13-3, Tangram*World включает

Tangram*Visual, каждый из которых включает TangramModel.

Категории компонентов

Tangram определяет категорию компонентов Tangram World. Членом этой категории является компонент, реализующий ITangramWorld и ITangramCanvas. Клиентский EXE использует категории компонентов, чтобы найти зарегистрированные компоненты, которые реализуют ITangramWorld и ITangramCanvas. Затем он дает пользователю возможность выбрать компонент, который тот хочет использовать.

Взаимозаменяемые компоненты

Одна из задач СОМ — обеспечить возможность замены компонента другим компонентом, поддерживающим те же самые интерфейсы. Пары TangramGLWorld TangramGLVisual и TangramGdiWorld TangramGdiVisual

взаимозаменяемы. Обе пары отображают на экране фигурки танграма, но совершенно по-разному.

Компоненты внутри процесса, локальные и удаленные

Компоненты TangramModel могут исполняться внутри процесса, локально или удаленно. Клиентский EXE запрашивает пользователя, как их выполнять.

Следующие три раздела посвящены некоторым особенностям (деталям) Tangram, которые не были рассмотрены в предыдущих главах книги.

Файлы IDL

В нескольких последних главах мы использовали один файл IDL для описания всех интерфейсов и компонентов приложения. Хотя это прекрасно подходит для учебного примера, хотелось бы, чтобы компонент видел только те интерфейсы, которые использует. В связи с этим в каждый файл IDL программы Tangram помещен один интерфейс или группа взаимосвязанных интерфейсов. В именах таких файлов IDL имеется суффикс _I. Например, MODEL_I.IDL содержит определения ITangramModel и ITangramTransform. Для построения

Соседние файлы в предмете Программирование на C++