«Машины должны работать. Люди должны думать»
61. Внедрение и связывание объектов
Понятие внедрения и связывания объектов.
Когда в некотором приложении используется команда «Вставить» (Paste), то создается внедренный компонент (embedded component) или некоторая совокупность внедренных данных (embedded item). Эти внедренные данные сохраняются как часть документа, который их содержит. В этом случае, к примеру, файл текстового процессора вроде Microsoft Word может содержать не только текст, но и изображения, графики, формулы или какие-либо иные типы данных.
Технология OLE предоставляет иной способ включения данных, созданных другими приложениями: создание связанного компонента (linked component), который называют также связанными данными (linked item) или просто связью (link). Алгоритм связывания данных подобен алгоритму их внедрения за тем исключением, что используется команда вставить связь (Paste Link) вместо вставить. В отличие от внедренного компонента, связанный компонент хранит путь путь к оригинальным данным, которые, как правило, сохраняются в отдельном файле.
Например, когда в документе Microsoft Word создается связь к некоторым ячейкам таблицы Microsoft Excel, то табличные данные сохраняются в документе (файле) Excel. Таким образом, документ Word содержит только ссылку на оригинальный документ Excel. Теперь при двойном щелчке по ячейкам вставленной в текст таблицы запускается приложение Excel и загружается файл, содержащий эти табличные данные.
Любые данные, внедрены ли они или связаны. имеют тип, ассоциированный с породившим их приложением. Это приложение, тем не менее, может создавать более чем один тип данных. К примеру, то же приложение Excel может создавать листы, диаграммы и макролисты (macrosheet). Каждый из этих видов данных однозначно идентифицируется CLSID (идентификатором класса).
Серверы и контейнеры.
Технология OLE предполагает, в первую очередь, наличие двух приложений: приложение-сервер и приложение-контейнер. Приложение сервер всегда обрабатывает внедренный (embedding) или связанный (embedding) OLE-документ.
Приложением-контейнером называют такое приложение, которое может включать внедренный или связанные данные в свои собственные документы. Документы, обрабатываемые приложением-контейнером, должны сохранять и отображать OLE-документы точно так же, как и свои собственные данные, т.е. данные, созданные приложением-контейнером. Кроме того приложение-контейнер должно позволять пользователям вставлять новые данные или редактировать существующие путем активизации приложения-сервера.
Приложением-сервером или приложением-компонентом называют такое приложение, которое может создавать OLE-документы для их последующего использования приложением-контейнером. Приложения-серверы обычно поддерживают технологию перетаскивания (drag and drop) или копируют свои данные в буфео обмена (clipboard), благодаря чему приложение-контейнер может вставить эти данные (в свой документ) как внедренные (embedding) или связанные (embedding). Любое приложение может быть и сервером и контейнером.
Приложения-серверы могут быть полными серверами или мини-серверами. Большинство приложений-серверов являются самостоятельными (stand-alone) приложениями или полными серверами (full-server). Такие серверы могут выполняться как самостоятельные приложения или могут быть запущены на выполнение приложениями-контейнерами. Мини-серверы могут быть запущены на выполнение только приложениями-контейнерами. т.е. не могут выполняться как самостоятельные приложения. Примерами мини-серверов служат Microsoft Draw и Microsoft Graph.
Контейнеры и серверы не взаимодействуют непосредственно, напрямую, а делают это посредством использования динамически подключаемых OLE-библиотек. Эти библиотеки предоставляют функции, которые вызывают контейнеры и серверы. В свою очередь контейнеры и серверы предоставляют функции обратного вызова (callback functions), которые вызваются OLE-библиотеками. Таким образом, OLE-библиотеки выполняют роль промежуточного слоя, разделяющего объединяющего контейнеры и серверы.
Благодаря такой технологии взаимодействия контейнер не должен знать деталей реализации сервера, что позволяет контейнеру получать данные, созданные любым сервером, и при этом не возникает необходимости в определении типа сервера, с которым взаимодействует контейнер. Вследствие этого пользователь приложения-контейнера может воспользоваться преимуществами будущих приложений и форматов данных. До тех пор пока эти новые приложения будут оставаться OLE-компонентами, составной документ (compound document) будет в состоянии включать данные, созданные такими приложениями.
Приложение-контейнер – это приложение, которое имеет специальный компонент, который, собственно, и называется контейнером. Компонент контейнер используется для того, чтобы хранить данные внедренного или связанного объекта (OLE-документа) и выполнять некоторые операции над объектом.
Для внедрения в приложение объекта необходимо использовать так называемый OLE-контейнер, правила создания и использования которого регламентированы СОМ. Также в соответствии со спецификацией СОМ должна быть обеспечена активизация объекта по месту (in-place activation), т.е. возможность редактирования объекта, находящегося в контейнере, с помощью соответствующего СОМ-сервера.
«60. Разработка клиентских приложений для MS Office как контролеров автоматизации»
62. Создание и отображение OLE-документов в формах