Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
02.05.2014
Размер:
384.51 Кб
Скачать

6.3.5.3. Принципы ole

В OLE понятие объекта имеет следующий смысл: объект - это совокупность трех видов данных:

  1. собственные данные в том внутреннем формате, в котором их создало приложение-сервер;

  2. данные для визуального представления;

  3. служебная информация о программе-сервере.

Т.о. OLE-объект – это данные, разделяемые двумя приложениями. Приложение-клиент только отображает данные (2).

Для приложения-клиента появился термин - OLE-контейнер - это приложение, которое может содержать объект. OLE-сервер - это приложение, которое может создавать и редактировать объект.

Появилось понятие "составной документ" как документ, содержащий различные типы данных, оформленные как объекты.

Для пользователей основным нововведением стала возможность активизации приложения, создавшего объект, из приложения-клиента, в котором объект находится. В поле объекта надо сделать двойной щелчок левой кнопкой мыши. Загрузится сервер и ему будет передан объект.

При этом понятие нахождения объекта в приложении-клиенте может приобретать двоякий смысл.

Вариант 1. Внедрение объекта. Смысл внедрения состоит в том, что все три вида данных объекта копируются в составной документ.

Объект

Собственные данные

Визуальное представление

Служебная информация

Copy

Insert object

Сервер

Объект

Клиент

Объект

Достоинство данного метода состоит в законченности файла составного документа. Все, что нужно, есть в нем самом. Это важно в случае возможного перенесения документа на другую физическую машину.

Недостаток состоит в том, что велик размер файла составного документа. Если есть несколько составных документов с данным объектом, то они скопированы в каждом из составных документов.

В

Paste Link

ариант 2. Связывание объекта. В этом случае вторая копия объекта не создается. Документ-клиент содержит только данные для визуального представления и ссылку на документ-сервер, содержащий объект. Ссылка - полный путь к объекту.

Визуальное представление (1)

Ссылка на объект (2)

Клиент

(1) (2)

Сервер

Объект

Copy

Связывание экономит место на диске, особенно, когда один объект является источником для многих клиентов, но при переносе на другую машину документа-клиента необходимо отследить, чтобы все документы-серверы тоже были перенесены.

Исторически протокол OLE существует в двух версиях - OLE 1.0 и OLE 2.0. Сейчас, естественно, предпочтение отдается OLE 2.0.

Версия OLE 1.0 была полностью реализована средствами DDE и обладает следующим неудобством. При активизации объекта в документе-клиенте, загружается приложение-сервер и ему передается объект для редактирования. Это хорошо, но плохо то, что приложение-сервер загружается в отдельном окне и при редактировании объекта не видно окружения, содержащегося в документе-клиенте. Недостатки, связанные с этим устранены в версии OLE - OLE 2.0.

6.3.5.4. Характеристика технологии ole 2.0

6.3.5.4.1. Версия OLE - OLE 2.0 реализует концепцию визуального редактирования - редактирования на месте. Приложение-сервер запускается при активизации объекта, но оно как бы запускается в окне приложения-клиента. Приложение-клиент как бы превращается в приложение-сервер. Было приложение-клиент, а стало приложение-сервер. В строку меню приложения-клиента встраиваются позиции меню приложения-сервера, необходимые для редактирования, аналогично согласованно корректируются и панели инструментов. А поле документа-клиента с визуальным представлением различных объектов не исчезает.

6.3.5.4.2. Другой особенностью ОLЕ 2.0 является возможность приложения предоставить ряд своих функций (например, проверку орфографии) для доступа из других приложений - OLE-Automation. Модуль, выполняющий нужную функцию, оформляется в виде объекта ОLЕ и передается в другое приложение.

Автоматизация OLE предоставляет возможности по управлению объектами, которые размещаются в других приложениях или в DLL.

Она работает не только вне границ приложений, но и вне границ языков и, в будущем, вне границ отдельной машины.

Автоматизация включает в себя СЕРВЕРЫ автоматизации и КЛИЕНТОВ автоматизации.

Сервер обеспечивает возможности, а клиент получает к ним доступ. Серверы делятся на серверы внутренней обработки и на локальные серверы. Сервер внутренней обработки - это DLL, загружаемая в адресное пространство программы клиента. Локальные серверы - это автономные программы.

Простой клиент автоматизации OLE

Следующий пример обеспечивает доступ из приложения Delphi к функциям Word.

Var

V : Variant;

Begin

V := CreateOleObject('Word.Basic');

V.FileNew('Normal');

V.Insert('Hello from Delphi!');

V.FileSaveAs('C:\SAMPLE.DOC');

End;

Этот код создает документ Word, вставляет в него строку и сохраняет его. Внешне все очень просто, но за внешней простотой скрыто множество сложнейших действий.

Следует обратить внимание на тип данных Variant и на методы FileNew, Insert, FileSaveAs, которые являются не процедурами Delphi, а методами Word.

Как осуществляется запуск Word. Для этого опять требуется реестр.

По словам 'Word Basic' в реестре находится значение специального идентификатора CLSID. По нему в этом же реестре находится строка примерно следующего вида: С:\WINWORD\WINWORD.EXE /Automation. По ключу /Automation Word возвращает ссылку на объект автоматизации, после чего оказываются доступными его методы.

Простые серверы автоматизации OLE

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

Const

AutoClassInfo : TAutoClassInfo = (

AutoClass : TMyAuto; // Имя класса объекта автоматизации

ProgID : 'AutoProj.MyAuto'; // Имя приложения.Имя модуля

ClassID : '12345678-1234-1234-123456789ABC';

Description : 'Sam';

Instancing : acMultiInstance);

Ключевыми элементами являются ProgID и ClassID, которые попадают в реестр (регистрационную базу данных) при регистрации, которая выполняется при запуске приложения с ключом /regserver. ClassID - случайное число, а чтобы не ссылаться на такое сложное число используется ProgID.

Instancing позволяет организовать сервер с доступом к нему либо нескольких клиентов одновременно, либо одного, либо внутренний сервер.

Услуги, предоставляемые сервером, реализуются методами, помещаемыми в раздел Automated объявления класса:

TMyAuto = Class(TAutoObject)

Private

Private declarations

Automated

Procedure ShowDialog;

End TMyAuto;

Procedure TMyAuto.ShowDialog;

Begin

ShowMessage('Hello!');

End TMyAuto.ShowDialog;

Процедура ShowDialog теперь доступна из приложений клиентов, выполняющих следующие действия:

Var

V : Variant;

Begin

V := CreateOleObject('AutoProj.MyAuto');

V.ShowDialog;

End;

6.3.5.4.3. Ядром ОLЕ 2.0 стал способ хранения данных в составном документе. Составной документ представляется в виде набора хранилищ, в каждом из которых может содержаться объект, созданный приложением-сервером. Само приложение-клиент не знает способа хранения объекта, созданного другим приложением. Поэтому при сохранении документа клиент как бы "просит" сервер сохранить свои объекты, а сам предоставляет хранилища для этого. При этом общая структура объекта едина для всех приложений, поддерживающих протокол ОLE, и выглядит так как было показано ранее.

Структурированная память - это новая техника для записи объектов или данных на диск. Эта техника обеспечивает все услуги, которые существуют в стандартном файловом вводе/выводе. Можно записывать файлы на диск, можно создавать каталоги и подкаталоги. Отличие структурированной памяти от стандартного файлового ввода/вывода заключается в том, что каждый набор каталогов и файлов структурированной памяти размещается внутри большого единого файла, подобно тому, как набор таблиц InterBase размещается внутри единого файла GDB.

Файл структурированной памяти называется составным файлом. Каталоги внутри этих составных файлов называются потоками.

Например, все DOC-файлы в действительности являются файлами структурированной памяти.

Возможно, структурированная память будет стандартной формой файлового ввода/вывода в будущих ОС.

Работа со структурированной памятью

Составной файл создается вызовом функции StgCreateDocFile, которая возвращает ссылку на интерфейсный объект IStorage. Этот вызов как бы создает новый чистый жесткий диск.

Основные методы работы с объектом IStorage:

  1. CreateStream;

  2. OpenStream;

  3. CreateStorage;

  4. OpenStorage;

Для получения потока вызывается метод этого объекта CreateStream, который возвращает ссылку на поток типа IStream. Этот вызов как бы создает новый файл на диске.

В поток можно писать данные методом Write. Читать данные из потока можно методом Read.

Основные методы работы с объектом IStream:

  1. Read;

  2. Write;

  3. Seek;

В конце работы с потоком и памятью их надо освободить методами Release.

Существует множество режимов работы со структурированной памятью, определяемых константами, передаваемыми в вызовы StgCreateDocFile и CreateStream. В частности возможен режим с транзакциями, при котором можно отменить результаты.

Структурированная память - это очень заманчивая система, когда требуется хранить очень много файлов. Эта система позволяет все их спрятать внутри одного файла.

Соседние файлы в папке Шпоры по СПО