В чем разница между COM и OLE? - PullRequest
46 голосов
/ 05 февраля 2009

В чем разница между COM и OLE, если есть?

Ответы [ 3 ]

65 голосов
/ 19 января 2012
  • OLE = Связывание и внедрение объектов
  • DDE = Динамический обмен данными
  • COM = объектная модель компонентов

OLE: Это метод связывания частей одного документа с частями другого. Например, наличие слайда PowerPoint со встроенной в него диаграммой Excel. Когда таблица Excel обновляется, диаграмма также должна обновляться. Когда вы снова открываете PowerPoint, волшебным образом это происходит! (Этот пример является связанным объектом.) Встроенные объекты такие же, только электронная таблица Excel не существует во внешнем файле, данные для электронной таблицы содержатся в файле PowerPoint.

Вы можете встраивать документы Excel, Word и PowerPoint друг в друга со связанными объектами. Другие приложения были написаны специально для поддержки встраивания в Word, такие как Microsoft Equation Editor.

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

OLE 2 был построен на COM.

COM - это независимая от языка объектно-ориентированная модель компонентов и ABI, основанная на DCE RPC. Как система RPC она поддерживала удаленные вызовы между процессами на одной машине, а затем, с DCOM, на разных машинах. Первоначально COM использовался как часть архитектуры MAPI (которая использует объектную модель COM, но не службы регистрации COM), а затем был официально запущен сам по себе как общая объектная модель, включающая в себя активацию реестра и объектов и другие службы. (Моникеры и структурированное хранилище, например.)

OLE Automation не имеет ничего общего с OLE - это только фирменное соединение. OLE Automation - это совместимое с Visual Basic подмножество COM, которое поддерживает только базовые типы данных (например, без целых чисел или структур без знака), но включает объекты (интерфейсы COM).

Управление OLE , однако связано с OLE. Они являются визуальными компонентами, в первую очередь предназначенными для пользователей Visual Basic начиная с VB 4, но визуальные элементы предоставляются с использованием средств встраивания OLE 2. Они также могут быть размещены (теоретически, если они правильно написаны) на всем, что может содержать OLE 2. встроенный объект, и также часто использовались в приложениях C ++. Обычно они используют интерфейсы, совместимые с OLE Automation, для программирования во время выполнения.

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

4 голосов
/ 05 февраля 2009

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

В некотором роде я все еще скучаю по OLE Structured Storage, поскольку есть кое-что приятное в совместном использовании непрозрачного хранилища данных между сотрудничающими системами. Ввиду того, что перетаскивание / буфер обмена все еще зависит от этого, мне интересно, какой будет замена .Net?

1 голос
/ 05 февраля 2009

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

Тогда, исторически, у нас было много программистов серверного типа, которые с завистью смотрели на такие классные вещи, как независимость от языка, подсчет ссылок и многопоточность, но на самом деле не слишком заботились о технологии внедрения. Логично было выделить функциональность базового сервера как COM - это более естественный низкоуровневый API.

Обе технологии все еще существуют. OLE в некотором роде связан с ActiveX или может быть таким же в наши дни.

...