COM和OLE有什么区别?

63

COM和OLE有什么区别,如果有的话?

3个回答

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

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

您可以使用链接对象将 Excel、Word 和 PowerPoint 文档相互嵌入。其他应用程序专门编写支持嵌入到 Word 中,例如 Microsoft 方程编辑器。

OLE 1 基于 DDE 构建,DDE 使用窗口消息来通知应用程序源数据已更改,并通过使用 HGLOBAL 全局内存句柄传递数据。

OLE 2 基于 COM 构建。

COM 是一种语言中立的面向对象组件模型和 ABI,基于 DCE RPC。作为一个 RPC 系统,它支持在同一台机器上的进程之间进行远程调用,并且后来通过 DCOM 在不同的机器上进行远程调用。最初,COM 作为 MAPI 架构的一部分使用(它使用 COM 对象模型但不使用 COM 注册服务),然后作为一个完整的对象模型正式启动,包括注册表、对象激活和其他服务。(例如单元标识符和结构化存储)。

OLE Automation 与 OLE 没有任何关系 - 它只是品牌连接。OLE Automation 是 COM 的 Visual Basic 兼容子集,仅支持基本数据类型(例如无符号整数或结构体除外),但包括对象(COM 接口)。

OLE控件与OLE相关,主要面向VB 4及以上版本的Visual Basic用户,但视觉元素是通过OLE 2的嵌入功能提供的。它们也可以被任何能够托管OLE 2嵌入对象的应用程序(在理论上,如果正确编写)托管,并经常用于C ++应用程序中。它们通常使用OLE自动化兼容接口进行运行时编程。

ActiveX控件是COM对象的营销术语,当时微软试图推广这项技术以扩展Web应用程序。


OLE自动化与OLE无关 - :(感谢微软 - Greedo

7
COM是OLE的进化版。OLE是一组接口和数据存储机制,旨在促进应用程序之间共享数据。COM不仅使用接口共享数据,还使用实际机制来促进运行时功能——这些数据由实际机制前置以便于使用。我一直将其大致比作C和C++之间的差异,在C中,您可以共享标头文件和结构,而在C++中,您共享封装对象。
值得一提的是,我仍然想念OLE结构化存储,因为共享协作系统之间的不透明数据存储很棒。考虑到拖放/剪贴板仍然依赖它,我想知道.NET的替代方案是什么?

8
OLE 不是 COM 的进化版本。OLE 1 比 COM 更早。但 OLE2 是建立在 COM 上的。OLE 结构化存储仍然存在并且将一直存在,如果需要可以从 .Net 中使用它。请注意,与诸如 ZIP 等东西相比,OLE 结构化存储的许多设计动机是允许就地修改磁盘数据结构。随着软盘和慢硬盘的终结,这在很大程度上已经消失了。 - Ben
3
@Ben - 你在引用答案时颠倒了COM和OLE的顺序。 - Martin Smith
@codekaizen,很遗憾,你的回答是错误的!我还能说什么呢?但愿不是这样! - Ben
@Ben - 通过快速的谷歌搜索,我发现维基百科上有同样的说法:“OLE 1.0后演变成为一个被称为组件对象模型(COM)的软件组件架构,之后又发展成DCOM。” - codekaizen
显然的下一步不等于进化。COM是建筑材料,OLE是用它建造的结构。DDE = 木板。OLE1 = 一个木制工具棚。COM = 砖头。OLE2 = 砖房。但砖头并不是演变出来的工具棚。OLE2是OLE1进化了,但砖头不是木头进化而来的。 - Ben
显示剩余6条评论

2

OLE技术比COM作为独立实体早了很长一段时间。在此之前,OLE被实现为一种嵌入和链接对象的方式。经典案例是将电子表格嵌入到Word文档中。COM的基础技术被启用,以便其他语言(如VB)也可以与这些对象交互。

然后,历史上,我们有很多服务器类型的程序员,他们羡慕这些酷东西,如语言独立性、引用计数和线程模型,但并不太关心嵌入技术。理所当然的事情是将底层服务器功能拆分为COM——这是一个更自然的低级API。

这两种技术仍然存在。现在,OLE与ActiveX有点联系在一起或者可能是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接