58

COM 和 OLE 之间有什么区别(如果有)?

4

3 回答 3

82
  • OLE = 对象链接和嵌入
  • DDE = 动态数据交换
  • COM = 组件对象模型

OLE:这是一种将一个文档的部分链接到另一个文档的部分的方法。例如,有一张嵌入了 Excel 图表的 PowerPoint 幻灯片。当 Excel 电子表格更新时,图表也应该更新。当您重新打开 PowerPoint 时,它神奇地出现了!(此示例是链接对象。)嵌入对象相同,只是 Excel 电子表格不存在于外部文件中,电子表格的数据包含在 PowerPoint 文件中。

您可以通过链接对象将 Excel、Word 和 PowerPoint 文档相互嵌入。其他应用程序是专门为支持嵌入 Word 而编写的,例如 Microsoft Equation Editor。

OLE 1建立在 DDE 之上,它使用窗口消息在源数据更改时通知应用程序,并且通常使用 HGLOBAL 全局内存句柄传递数据。

OLE 2建立在 COM 之上。

COM是一种语言中立的、面向对象的组件模型和基于 DCE RPC 的 ABI。作为一个 RPC 系统,它支持同一台机器上的进程之间的远程调用,以及后来使用 DCOM 在不同机器上的远程调用。最初,COM 被用作 MAPI 体系结构的一部分(它使用 COM 对象模型,但不使用 COM 注册服务),然后作为具有注册和对象激活和其他服务的通用对象模型自己正式启动。(例如,名称和结构化存储。)

OLE 自动化与 OLE 无关 - 它只是一个品牌连接。OLE 自动化是 COM 的 Visual Basic 兼容子集,它仅支持基本数据类型(例如无符号整数或结构),但包括对象(COM 接口)。

然而, OLE 控件与 OLE 相关。从 VB 4 开始,它们是主要针对 Visual Basic 用户的可视化组件,但可视化元素是使用 OLE 2 的嵌入工具提供的。它们也可以由任何能够承载 OLE 2 的东西承载(理论上,如果编写得当)嵌入式对象,也经常用于 C++ 应用程序。他们通常使用 OLE 自动化兼容接口在运行时进行编程。

ActiveX 控件是 COM 对象的营销术语,从 Microsoft 试图普及扩展 Web 应用程序的技术开始。

于 2012-01-19T16:35:32.843 回答
6

COM是OLE演变而来的。OLE 是一组接口和数据存储机制,用于促进应用程序之间的数据共享。COM 是使用接口的自然扩展,不仅可以共享数据,还可以共享运行时功能——其中数据以实际机制为前端,以方便使用。我一直把它大致描述为 C 和 C++ 之间的区别,在 C 中,您可以共享头文件和结构,而在 C++ 中,您可以共享封装的对象。

作为一个肥皂盒,我仍然怀念 OLE 结构化存储,因为在协作系统之间共享不透明数据存储有一些好处。看到拖放/剪贴板仍然依赖它,我想知道 .Net 替代品会是什么?

于 2009-02-05T04:47:37.317 回答
1

OLE 技术比 COM 作为一个单独的实体早了很长一段时间。在此之前,OLE 被实现为嵌入和链接对象的一种方式。典型的例子是在 Word 文档中嵌入电子表格。启用了 COM 的底层技术,以便 VB 等其他语言也可以与这些对象进行交互。

然后,从历史上看,我们有很多服务器类型的程序员羡慕地看着这些很酷的东西,比如语言独立性、引用计数和线程模型,但实际上根本不关心嵌入技术。合乎逻辑的做法是将底层服务器功能拆分为 COM——这是一个更自然的低级 API。

这两种技术仍然存在。如今,OLE 与 ActiveX 有某种联系或可能与 ActiveX 相同。

于 2009-02-05T04:49:39.933 回答