Что такое ole механизм обмена данными

Что такое ole механизм обмена данными

Технология OLE является частью большой технологии обмена. Кроме технологий, включающих в себя связывание и включение объектов, OLE связано с ActiveX, структурированной памяти и технологией перетаскивания объектов. Все эти технологии базируются на технологии Component Object Model, или COM.

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

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

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

В целом, работа в документно-ориентированной среде состоит в совместном использовании нескольких приложений, каждое из которых выполняет отдельные функции.

Для организации документно-ориентированной работы известны следующие технологии:

2) OpenDoc à OpenSource Development.

Принципы технологии OLE.

В данной технологии, понятие объекта имеет иной смысл, нежели в ООП. Здесь, объект – это совокупность данных трех видов:

1. Собственные данные в том внутреннем формате, в котором они создавались в сервере;

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

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

Из этих трех видов данных приложение-клиент отображает данные второго вида. Для этого приложения здесь используется термин «OLE-контейнер». Это приложение, которое может содержать объект и отображать его. Для сервера используется «OLE-сервер». OLE-сервер может создавать и редактировать объект.

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

1. Метод внедрения объекта;

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

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

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

2. Метод связывания.

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

Связывание позволяет экономить место на диске. Но при переносе на другую ЭВМ документа-клиента, на этой же ЭВМ должны присутствовать все документы-серверы.

Известны две версии: OLE 1.0, OLE 2.0.

Первая технология полностью реализована средствами DDE, и обладает следующим недостатком: при активизации объекта в клиенте запускается приложение-сервер, ему передается объект для редактирования, при этом сервер запускается в отдельном окне, и при редактировании объекта в этом окне не видно окружения, содержащегося в документе-клиенте.

Во второй версии этот недостаток устранен.

Особенности OLE 2.0

1. Реализуется концепция визуального редактирования по месту размещения объекта. Приложение-сервер запускается при активизации объекта, но при этом, окно приложения-сервера не открывается, а в строку меню приложения-клиента встраиваются пункты меню приложения-сервера. Аналогичным образом изменяется и панель инструментов. Поле документа-клиента с визуальным представлением не исчезает;

2. Возможность предоставления некоторых своих функций, например, проверки орфографии для доступа из других приложений. Эта возможность называется «автоматизация OLE». Модуль, выполняющий нужную функцию, оформляется в виде объекта OLE и вставляется в другое приложение. Автоматизация OLE может использоваться не только вне границ приложений, но и вне границ языков, а в перспективе – вне границ отдельной ЭВМ. Автоматизация включает в себя серверы автоматизации и клиенты автоматизации. Сервер обеспечивает возможности, а клиент получает к ним доступ. Серверы делятся на серверы внутренней обработки и локальные серверы. Серверы внутренней обработки представляются как .dll, загружаемая в адресное пространство клиента. Локальные серверы – это автономные программы;

Читайте также:  Как зайти в меню билайн

3. Способ хранения данных в составном документе. Составной документ представляется в виде набора мест хранения, в каждом из которых может содержаться объект, созданный сервером. При этом, приложение-клиент не имеет информации о способе хранения объекта, созданного в другом приложении. При сохранении документа во внешней памяти, клиент создает возможность для сервера сохранять свои объекты, и предоставляет для этого место хранения. При этом, в качестве способа записи объектов или данных на диск используется новый способ, называемый структурированной памятью. Он обеспечивает все возможности, существующие в стандартном файловом вводе/выводе. На диске можно создавать каталоги и подкаталоги, и сохранять в них файлы. Отличие структурированной памяти от стандартного файлового ввода/вывода состоит в том, что каждый набор каталогов и файлов в структурированной памяти размещается внутри единого большого файла, который называется составным файлом. Каталоги внутри таких файлов называются потоками. Примером использования составных файлов являются .docx файлы;

4. Внутренние средства версии, используемые для обмена данными. С точки зрения обмена данными, OLE 2.0 – это набор интерфейсов, позволяющий клиенту и серверу обмениваться данными. При этом, протокол обмена называется Uniform Data Transfer (UDT). Данный протокол представляет собой расширение протокола обмена через буфер обмена, в котором предусматриваются средства уведомления об изменении данных и форматах. При этом, отсутствуют ограничения на размер данных, то есть можно передавать как сами данные, так и ссылки на них. В средствах обмена не используется протокол DDE, основанных на передаче сообщений.

Технология обладает определенными достоинствами.

1. OLE из средства обмена данными превратилась в средство взаимодействия и хранения данных.

2. В ОС Windows эта технология является основой объектно-ориентированного пользовательского интерфейса.

3. В будущих версиях предполагается использовать сетевую технологию OLE 3.0, позволяющую клиенту и серверу находиться на разных ЭВМ.

Вместе с тем, у технологии имеются недостатки:

1. Сложность для разработчиков;

2. Некоторая несогласованность в интерфейсах разных приложений;

3. Большая потребность в аппаратных ресурсах;

4. Расхождение в понятиях объекта как объекта OLE и объекта в ООП.

На странице System палитры компонент в Borland Builder С++ есть специальный компонент , предназначенный для внедрения и связывания объектов из других приложений — OLEContainer.

Основные свойства

Свойство State позволяет определить состояние объекта и его сервера. Его значения:

osEmpty –контейнер не содержит объекта;

osLoaded – объект в контейнере, сервер не выполняется;

osRunning – сервер запущен;

osOpen – OLE –объект открыт в отдельном окне сервера;

osInPlaceActive – объект активизирован «на месте», но меню еще не изменено. Это промежуточное состояние объекта перед полной загрузкой сервера.

osUIActive объект активизирован «на месте», меню изменено.

Следующий код позволяет определить имя объекта, загруженного в контейнер (свойство AnsiString OleClassName), способ работы с объектом (Linked = true – связывание, иначе – внедрение), а также получить имя связанного документа:

if (OleContainer1 -> State != osEmpty)

Label2 -> Caption = OleContainer1 -> OleClassName;

// Состояние контейнера – целое число, начиная с 0 (osEmpty)

Label6 -> Caption = OleContainer1 -> State;

if ( OleContainer1 -> Linked)

Label4 -> Caption = OleContainer1 -> SourceDoc;

Свойство bool AllowInPlace определяет возможность редактировать внедренный объект «на месте». Если AllowInPlace = true и Iconic = false (свойство Iconic определяет должен ли объект быть представлен в виде пиктограммы), то «InPlace» – редактирование разрешено. При AllowInPlace = false сервер будет открываться в отдельном окне.

Читайте также:  Загрузочная флешка с выбором iso

Свойство AutoActivate имеет три возможных значения: aaManual, aaGetFocus, aaDoubleClick и определяет способы активизации загруженного в контейнер объекта.

По умолчанию AutoActivate = aaDoubleClick, то есть объект становится активным при двойном щелчке. Значение aaGetFocus определяет активизацию при получении фокуса ввода. При AutoActivate = aaManual за активизацию объекта отвечает программист. В этом случае можно использовать метод компонента-контейнера DoVerb, который отвечает за передачу команд от контейнера серверу. Например, можно воспользоваться следующим оператором:

OleContainer1->DoVerb (ovShow); // Показать объект

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

Создание и сохранение нового объекта (внедрение)

Создание нового объекта можно обеспечить использованием специального диалогового окна Insert Object (вставка объекта) или вызовом метода CreateObject. В первом случае класс объекта выбирает пользователь из системного списка возможных объектов, а во втором программно создается конкретный объект.

Для использования диалогового окна можно воспользоваться следующим кодом, расположенным, например, в команде меню «новый»:

AnsiString File_Name; // переменная объявлена глобально или в классе формы

В появившемся диалоговом окне необходимо установить значение RadioButton — кнопки «Создать новый», в списке выбрать необходимый тип объекта и щелкнуть «OK».

Программно объект можно создать так (операторы можно вставить, например, в соответствующие пункты меню):

Если создать нужно объект, имя типа которого неизвестно, то нужно обратиться либо к соответствующей документации по серверу, либо написать тестовую программу с загрузкой объекта методом OleContainer->InsertObjectDialog() и воспользоваться свойством OleContainer -> OleClassName для определения его имени.

При создании нового объекта используется внедрение (так как для связывания необходим файл). В этом случае за хранение данных объекта отвечает программа — контейнер. Сохранить данные в файле можно с помощью метода SaveToFile ( ), например, в пункте меню «Файл — Сохранить…» можно использовать следующий код:

void __fastcall TForm1::FSaveClick(TObject *Sender)

В данном примере расширение файла .ole указывает на то, что объект будет сохранен в специальном формате отличном от формата сервера. Приложение — сервер отдельно от контейнера прочесть эти данные не сможет.

Функция ChangeFileExt была использована в примере для замены расширения файла. При выполнении команд сохранения и извлечения данных из файла могут понадобиться и другие функции обработки имен файлов:

ChangeFileExt(const AnsiString FileName, const AnsiString Extension) – принудительно изменяет имя файла FileName, заменяя расширение на Extension;

функция AnsiString ExtractFileExt(AnsiString FileName) возвращает расширение файла и, следовательно, позволяет проверить его тип;

AnsiString ExtractFileName(AnsiString FileName) возвращает имя файла, извлеченное из строки FileName, т.е. после последнего обратного слэша или двоеточия;

AnsiString ExtractFilePath(AnsiString FileName) извлекает путь к файлу, включая последний слэш или двоеточие;

AnsiString ExtractFileDrive(AnsiString FileName) извлекает диск файла с двоеточием (например, «D:»).

Метод контейнера LoadFromFile( ) позволяет загрузить запомненный объект в контейнер:

void __fastcall TForm1::FOpenClick(TObject *Sender)

if (ExtractFileExt(OpenDialog1->FileName)!= ".ole")

Технология DDE

Для обмена данными между приложениями может использоваться технология DDE(Dynamic Data Exchange — динамический обмен данными), суть которой состоит в том, что вставляемый через буфер обмена объект сохраняет свою связь с оригиналом и при внесении в него изменений может автоматически обновляться. При этом с одним оригиналом можно связать любое число документов; возможно связывание по цепочке, когда источником является не оригинал, а ранее связанный объект; установленная связь сохраняется и после закрытия приложений, т.е. внесенные в оригинал изменения автоматически вносятся во все документы, связанные с ним.

Для использования технологии DDE следует обычным путем скопировать объект из документа приложения-сервера в буфер обмена, перейти в приложение-клиент, а затем по команде Правка ►Специальная вставка ►переключатель Связьвставить его в документ.

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

Читайте также:  Как включить спутниковое тв на телевизоре

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

При обмене данными по рассмотренным технологиям объектом является любой фрагмент, переносимый из одного приложения в другое. На самом же деле переносился не сам фрагмент, а лишь его "экранный образ": приложение-источник преобразовывает данные из своего внутреннего формата в один из стандартов Windows, и в таком виде фрагмент вставляется в приложение-приемник. Вставленный объект является составным элементом документа, в котором он отображается, но внести в него изменения довольно трудно, так как для этого требуется приложение-источник.

Технология связывания и внедрения объектов (Object Linking and Embedding) имеет больше функциональных возможностей, причем если приложение поддерживает OLE, то оно само выполняет обмен данными по этой технологии.

Операции связывания (Linking) и внедрения (Embedding), реализованные в рамках OLE, внешне напоминают технологию DDE и обмен данными через буфер обмена. При работе по технологии OLE выполняется та же последовательность действий. Документ со встроенными OLE-объектами выглядит аналогично документу с фрагментами, вставленными через буфер обмена. Однако в этом случае при двойном щелчке мыши в поле объекта он активизируетсяи запускается приложение, в котором создавался этот объект, и в него передается объект для редактирования или выполнения других операций. После окончания работы с объектом программа-источник закрывается, а измененный объект автоматически передается обратно в документ приложения-клиента.

В рамках технологии OLE объект представляет собой сочетание данных какого-либо вида (текст, графика, видео, звук и др.) во внутреннем формате приложения-сервера, представленном в одном из стандартных форматов Windows, и информации о создавшей его программе, размере, времени создания и т.д. Таким образом, объект является законченной структурой, переносимой из одного документа в другой и сохраняющей отличительные особенности, независимо от типа документа, в котором в данный момент находится.

♦ отсутствует необходимость создания второй копии объекта, что позволяет сократить требуемый объем дискового пространства;

♦ внесение изменений в связанный объект обеспечивает дублирование этих изменений во всех документах, с которыми объект был связан;

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

♦ изменения вставленного объекта не отражаются в оригинале;

♦ вся информация хранится в одном файле и никаких проблем при переносе на другой компьютер не возникает.

В рамках OLE реализован метод drag-and-drop(перетащить и бросить), который обеспечивает наглядность процесса обмена данными, и его можно применять вместо операции копирования через буфер обмена даже при межоконном перемещении объектов и их частей.

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

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

OLE-технология, разработанная корпорацией Microsoft, обеспечивает:

— привязку — возможность вызова одной программы из другой;

— встраивание — помещение объектов, созданных в одном приложении, в документ другого.

Дата добавления: 2014-12-16 ; Просмотров: 642 ; Нарушение авторских прав?

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Ссылка на основную публикацию
Что значит код ошибки 805а8011
Многие владельцы смартфонов с операционной системой Windows Phone не могут войти в учетную запись магазина Marketplace. На экране появляется код...
Хочу создать группу в контакте
Приветствую вас, дорогие читатели. Социальные сети уже давно вошли в нашу жизнь, поэтому всем владельцам абсолютно любого бизнеса, как традиционного,...
Хром для андроид тв приставок
Всем привет! Предлагаю очередной раз поднять больную тему браузеров для Android TV. В разделе «вопрос – ответ» уже много раз...
Что значит интегрированный процессор
Здравствуйте, уважаемые пользователи и любители компьютерного железа. Сегодня порассуждаем на тему, что такое интегрированная графика в процессоре, зачем она вообще...
Adblock detector