Занятие 3. Связывание и внедрение объектов
(Продолжительность занятия 20 минут)
Связывание и внедрение объектов (Object Linking and Embedding, OLE) — основанный на СОМ механизм, позволяющий приложениям взаимодействовать между собой. Он повышает эффективность работы за счет использования в приложении возможностей других программ. OLE применяют для построения составных документов, которые можно хранить в одном составном файле. На этом занятии Вы узнаете, как применять OLE для создания составных документов и управления приложениями.
Составные файлы
Технология составных документов OLE основана на СОМ, структурированных хранилищах и унифицированной передаче данных. Объект «составной документ» — это, в сущности, объект СОМ, который можно внедрить в существующий документ или связать с ним. Как всякий объект СОМ, он предоставляет клиентам интерфейс IUnk-nown. Этот интерфейс делает доступными указатели на другие интерфейсы, реализующие конкретные возможности составного документа, а именно:
При создании составного документа одно приложение является контейнером, а другое — сервером. Серверный документ может быть связан с приложением-контейнером или внедрен в него. При связывании документа он хранится в отдельном от контейнера файле. Внедренные документы, напротив, хранятся в том'же файле, что и контейнер (рис. 5.8).
Применение составных файлов
Популярность технологии составных файлов объясняется эффективным и гибким доступом к данным объекта, который предоставляет система хранилищ OLE. Она позволяет считать с диска в память объект или его часть, а не весь файл, что весьма важно при загрузке документа OLE с большим числом объектов или одним объектом большого объема (например, видеоклипом). Этот способ гораздо эффективнее — так пользователь сразу получает доступ к нужным данным, не ожидая загрузки всех материалов.
Рис. 5.8 Использование составных документов
Разнообразие форматов и источников данных
Составные документы OLE позволяют работать внутри одного приложения со множеством данных в любых форматах из самых разнообразных источников. Например, пользователь может вставить в документ текстового редактора график из одного приложения и звуковой объект — из другого. Активизировав график, Вы запустите создавшую его программу (или часть ее пользовательского интерфейса, содержащую средства редактирования объекта). Активизация звукового объекта позволит воспроизвести его средствами соответствующего приложения. В обоих случаях пользователь может манипулировать данными из внешних источников в контексте своего документа.
> Использование составных документов
В этом упражнении Вы сначала вставите в документ Microsoft Word растровое изображение, а затем отредактируете его средствами Microsoft Paint.
Обратите внимание, что теперь в Microsoft Word доступны меню и панель инструментов Microsoft Paint.
Теперь Вы добавите график Microsoft Excel в форму Visual Basic как составной документ OLE. При этом автоматически включится поддержка его редактирования.
> Создание проекта Visual Basic
В элементе управления появится простой график. Автоматически будет раз решено редактирование по месту.
> Проверка средств редактирования
Запустится процесс редактирования по месту. Обратите внимание на появление в форме меню Excel.
График будет обновлен в соответствии с новым типом.
Структурированные хранилища OLE
При использовании объектов СОМ данные хранятся в специфическом формате, называемом структурированным хранилищем OLE. Он позволяет объединять данные из разных документов в один составной документ.
Система хранилищ напоминает файловую систему. Доступ к данным объекта осуществляется через ряд интерфейсов, предоставляемых OLE. Последний реализует систему хранилищ в виде составных файлов.
Файлы структурированных хранилищ
Основное назначение СОМ — интеграция приложений. Следствие объединения приложений — необходимость хранить содержащуюся в них информацию в одном и том же файле. Решение этой проблемы — файловая система внутри файла. Теперь не надо обрабатывать поток данных с помощью дескриптора и указателя смещения одного файла: OLE предоставляет модель, позволяющую трактовать файл как структурированный набор объектов двух типов — хранилищ и потоков (рис. 5.9). Они аналогичны каталогам и файлам соответственно. Эта модель называется структурированным хранилищем.
Рис. 5.9 Файлы структурированных хранилищ
Хранилища и потоки
Структурированное хранилище OLE — это иерархическая система хранения данных, которая имитирует файловую систему внутри файла. В ней два уровня хранения:
Эти объекты аналогичны уровню каталогов типовой файловой системы (рис. 5.10). Первый содержит потоки и/или другие хранилища; второй — данные. Каждому объекту соответствует объект-хранилище. Доступ к объектам и данным в системе хранения осуществляется через набор интерфейсов, предоставляемых OLE.
Рис. 5.10 Хранилища и потоки
Эффективность структурированных хранилищ
Структурированные хранилища — простой и эффективный метод размещения объектов и составных файлов. Этот механизм позволяет увеличить производительность и снизить накладные расходы, характерные для хранения отдельных объектов в обычных файлах. Вместо этого СОМ помещает все объекты в единый структурированный файл, состоящий из двух основных элементов: объектов-хранилищ и объектов-потоков. Вместе они действуют как файловая система внутри файла. Подобно файлу, поток содержит данные в виде последовательности байтов.
Вложенные объекты
Составной файл СОМ состоит из объекта «корневое хранилище», содержащего по крайней мере один объект-поток данных хранилища, и одного или нескольких объектов-хранилищ — связанных и внедренных объектов. Объект «корневое хранилище» назван по имени файла в той файловой системе, где он находится. Объекты-хранилища могут включать любое число объектов-потоков и вложенных объектов-хранилищ, реализующих объекты документа. Таким образом, документ содержит сколь угодно много вложенных объектов (рис. 5.11).
Например, если в документ Word вставлен график Excel, корневым объектом будет объект-хранилище документа Word. Он содержит как свои данные; так и OLE-данные для объекта Word. Кроме того, здесь же находится объект-хранилище для графика Excel с данными самого объекта и OLE-данными объекта Excel.
Рис. 5.11 Вложенные объекты
Модификация и добавление объектов
Добавление нового объекта к составному файлу или увеличение имеющегося объекта не вызывает перезаписи файла хранилища. Вместо этого новые данные записываются в первую свободную область хранилища, а объект-хранилище соответствующим образом обновляет свою таблицу указателей (в ней содержится информация о местонахождении объектов-хранилищ и потоков). Этот механизм повышает производительность операции с данными и позволяет конечным пользователям работать с составным хранилищем как с единым файлом, а не как с иерархией отдельных объектов.
Дополнительные преимущества
OLE-автоматизация
OLE-автоматизация — это сервис OLE, предназначенный для интеграции средств разработки и приложений: приложения предоставляют свои функции другим приложениям или управляют их возможностями на одном компьютере или в сетевой среде. Применение этой технологии обеспечивает автоматизацию приложений и их объединение с программным кодом. Вот основные элементы OLE-автоматизации.
Фактически, OLE-автоматизация представляет собой процесс обмена инструкциями между контроллерами и серверами OLE-автоматизации. Пользуясь средствами, которые предоставил сервер, контроллер передает ему инструкции для выполнения.
Резюме
Технология OLE предназначена для создания составных документов и использования функциональных возможностей приложений. Технология составных документов OLE основана на СОМ, структурированных хранилищах и унифицированной передаче данных. Объект «составной документ» — это объект СОМ, который можно встроить в существующий документ или связать с ним. Составные документы позволяют манипулировать данными любых форматов из различных источников внутри одного приложения.
OLE определяет модель структурированного хранилища, которая трактует файл как структурированный набор объектов двух типов: хранилищ и потоков. Первые аналогичны каталогам, а вторые — файлам. Структурированное хранилище увеличивает производительность и уменьшает издержки, связанные с размещением объектов по отдельности в разных файлах.
Благодаря OLE-автоматизации приложения могут предоставлять свои функции другим приложениям или управлять их возможностями на одном компьютере или в сетевой среде.