- •6. Системное программное обеспечение для коммуникаций
- •6.1. Общая характеристика коммуникаций
- •6.2. Концепции технологии Клиент-Сервер
- •6.3. Внутренние коммуникации между процессами
- •6.3.1. Неименованные каналы
- •6.3.2. Обмен сообщениями
- •1. Подготовка данных для передачи в Clipboard;
- •4. Закрытие Clipboard
- •6.3.5.2. Понятие документно-ориентированной среды
- •6.3.5.1. Введение
- •6.3.5.3. Принципы ole
- •6.3.5.4. Характеристика технологии ole 2.0
- •6.3.5.4.4. Дополнительные возможности ole 2.0:
- •6.3.5.4.5. Внутренние механизмы ole 2.0
- •6.3.5.4.6. Перспективы ole
- •6.3.5.4.7. Недостатки ole
- •6.3.5.5. Технология проектирования ole-контейнера
- •6.3.5.5.1. Трехуровневая адресация ole-объекта
- •6.3.5.5.2. Общая характеристика технологии создания ole-клиента
- •6.3.5.5.3. Методика создания приложения с ole-контейнером
- •1. Создание формы с mdi - многодокументным интерфейсом
- •2. Разработка процедуры вставки объектов
- •3. Разработка процедуры переноса объектов из Clipboard
- •4. Разработка процедуры перетаскивания объектов
- •5. Разработка процедур поддержки хранения объектов в файлах
- •6.3.5.5.4. Выводы
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:
CreateStream;
OpenStream;
CreateStorage;
OpenStorage;
Для получения потока вызывается метод этого объекта CreateStream, который возвращает ссылку на поток типа IStream. Этот вызов как бы создает новый файл на диске.
В поток можно писать данные методом Write. Читать данные из потока можно методом Read.
Основные методы работы с объектом IStream:
Read;
Write;
Seek;
В конце работы с потоком и памятью их надо освободить методами Release.
Существует множество режимов работы со структурированной памятью, определяемых константами, передаваемыми в вызовы StgCreateDocFile и CreateStream. В частности возможен режим с транзакциями, при котором можно отменить результаты.
Структурированная память - это очень заманчивая система, когда требуется хранить очень много файлов. Эта система позволяет все их спрятать внутри одного файла.
