Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Интересности по COM.doc
Скачиваний:
37
Добавлен:
28.06.2014
Размер:
7.48 Mб
Скачать

3. Контроль постоянства объекта

Контролирование постоянства объекта

• Клиент может инициализировать объект, который он создает, спрашивая объект, чтобы загрузить его постоянные данные

•Клиент обычно просит объект загрузить его постоянные данные через один из интерфейсов IPersist*

• Объект может поддерживать один или более интерфейсов IPersist*

• Объект обычно не знает где найти свои постоянные данные. Это должно быть сказано его клиентом

- Интерфейсы IPersistStream и IPersistStreamInit

• Объект поддерживает IPersistStream и IPersistStreamInit, если его постоянные данные могут быть сохранены в одном потоке

- Интерфейс IPersistStoragen

• Объект поддерживает IPersistStorage, если его постоянные данные сохранены в одном или более потоках ниже памяти

Рис. 5.3 Иллюстрация интерфейсов IPersistStream и IPersistSreamInit

Рис. 5.4. Иллюстрация интерфейса IPersistantStorage

-Интерфейс IPersistFile

•Объект поддерживает IPersistFile, если его постоянные данные сохранены в обычном файле

-Интерфейс IpersistPropertyBag

•Клиент COM объекта может захотеть сохранить эти данные объекта

•Если объект поддерживает IPersistPropertyBag, он может сохранить свои постоянные данные в сумке с клиентно-обеспеченными свойствами

•Клиенты объекта, поддерживающего IPersistPropertyBag, должен выполнить интерфейсы IPropertyBag и ErrorLog

•Клиент, не объект, контролирует как и где свойства объектов сохранены

-Интерфейс IPersistMemoryInterface

•Объект, который поддерживает IPersistMemory может передавать свои постоянные данные клиенту в большую разделенную память

Рис. 5.6. Иллюстрация IPersistPropcrtyBag и связанных с ним интерфейсов

Рис. 5.7 Иллюстрация интерфейса IPersistMemory

Новые понятия и термины:

  • Постоянные данные объекта - информация о состоянии объекта, которая сохранена между созданиями экземпляра объекта

  • Имя корня памяти – это тоже самое, что название файла

Контрольные вопросы:

1.Что понимается под постоянством?

2. Структурная память для файлов

3. Контроль постоянства объекта

Литература:

1.David Chappell “Understanding Active X and OLE”.Microsoft Press, 1996

Тема 6. Моникеры

План

1. Что такое моникеры?

2. Асинхронный моникер

1. Что такое моникеры?

• Обозначение объектного образца требует определение его методов и данных

• Сам COM не предлагает способов обозначения образца объекта

Определение Моникера (Moniker

)

• Моникер обозначает специфический образец объекта

• Моникер это объект, который поддерживает интерфейс Imoniker

• Клиент может спросить moniker связать объект с именами moniker

• Моникер может делать все захочет, чтобы создать и инициализировать объект, который он назвал

• Моникеры может сильно облегчить жизнь клиента

-Пример сложных документов

• Вставленные данные документа сохранены в его файле контейнера

• Файл контейнера сохраняет только указатель на присоединенные данные документа

• Указатель – это moniker

•Что же действительно сохранено – это постоянные данные для moniker

Рис. 6.1. Использование Моникера

Рис. 6.2 Файл контейнера сохраняет постоянные данные для moniker, который обращается к присоединенному документу.

Пример базы данных

• База данных OLE обеспечивает доступ основанный на COM к различным видам данных

• Моникер может создать объект и затем инициализировать его с результатом из запроса к базе данных

Работа с Моникером

Классы Моникер

• Были определены различные стандарты классов moniker

• Постоянные данные файлового moniker –это название файла, пока постоянные данные элемента moniker строка символов

• Составной моникер ведет как контейнер упаковки других моникер

- Создание Моникер

• Объект – названия moniker могут обеспечить постоянные данные moniker

• Клиент может приобретать постоянные данные moniker многими другими путями

• Выполнение обеспечивается для стандартных классов moniker

Рис. 6.3. Пример постоянных данных для наиболее важных классов моникер.

Рис. 6.4. Составной moniker с указателями на его три компонентных моникер.

• Стандарт моникер– создает образец используя поставляемые в составе системы функций

• Библиотека функций не доступна для нестандартных классов moniker

- Пример соединения моникер

• Составной моникер обслуживает указатель на каждый из его компонентных моникер

• Клиент видит только компонентный моникер

• Компонентные морникер связываются справа налево

• Если объект уже запущен, связывание может быть более эффективным

• Запуск объектной таблицы позволяет моникер определить тот ли объект, чье имя запущено

• Если его цель не достигнута, то элементный moniker вызывает BindToObject на моникер слева

• моникер может использовать расширение имени файла, чтобы определить CLSID объекта

• Объект, называемый файловым moniker, должен поддерживать IPersistFile

• Элементные moniker полагаются на lOleltemContainer

Рис 6.5. Каждый моникер полагается на моникер слева, надеясь избежать выполнения большей работы , чем необходимо.

Рис. 6.6. Файловый и элементный моникер, инициализирующие свои объекты.

• Элементный moniker использует I0leItemContainer::GetObject чтобы создать и инициализировать целевой объект

• моникеры полезны с соединенными документами, но также имеет и более широкое применнение

• Связывающий контекст поддерживает разделенную информацию, используемую в процессе связывания

•Запущенная таблица объекта – это объект , который поддерживает интерфейс IRunningObjectTable

• Моникер может запросить запущенную таблицу объекта для объекта, который моникер назвал

- Интерфейс IMonikerInterface

• IMoniker –относительно сложный интерфейс

• IMoniker наследует от IpersistStream