COM和OLE有什么区别?

时间:2009-02-05 04:40:18

标签: com ole

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

3 个答案:

答案 0 :(得分:65)

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

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

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

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

OLE 2 是基于COM构建的。

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

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

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

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

答案 1 :(得分:4)

COM是OLE演变的。 OLE是一组接口和数据存储机制,便于在应用程序之间共享数据。 COM是使用接口的自然扩展,不仅可以共享数据,还可以使用运行时功能 - 数据由实际机制提供,以方便使用。我总是将它描述为C和C ++之间的区别,使用C,您可以共享头文件和结构,使用C ++共享封装对象。

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

答案 2 :(得分:1)

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

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

这两种技术仍然存在。 OLE现在与ActiveX相关联,或者可能与ActiveX相同。