COM和OLE之间有什么区别?

COM和OLE之间有什么区别?,com,ole,dde,Com,Ole,Dde,COM和OLE之间有什么区别(如果有的话)?COM是OLE进化而来的。OLE是一组接口和数据存储机制,用于促进应用程序之间的数据共享。COM是使用接口的自然延伸,不仅用于共享数据,而且用于运行时功能,其中数据由实际的机制引导以便于使用。我一直把它大致看作C和C++之间的区别,在C中,你可以共享头文件和结构,用C++共享封装对象。 有点像肥皂盒,我仍然怀念OLE结构化存储,因为在协作系统之间共享不透明数据存储有一些好处。由于拖放/剪贴板仍然依赖于它,我想知道.Net的替代品将是什么?OLE技术比C

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

COM是OLE进化而来的。OLE是一组接口和数据存储机制,用于促进应用程序之间的数据共享。COM是使用接口的自然延伸,不仅用于共享数据,而且用于运行时功能,其中数据由实际的机制引导以便于使用。我一直把它大致看作C和C++之间的区别,在C中,你可以共享头文件和结构,用C++共享封装对象。
有点像肥皂盒,我仍然怀念OLE结构化存储,因为在协作系统之间共享不透明数据存储有一些好处。由于拖放/剪贴板仍然依赖于它,我想知道.Net的替代品将是什么?

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

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

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

  • OLE=对象链接和嵌入
  • 动态数据交换
  • 组件对象模型
OLE:这是一种将一个文档的部分链接到另一个文档的部分的方法。例如,在PowerPoint幻灯片中嵌入Excel图表。更新Excel电子表格时,图表也应更新。当你重新打开PowerPoint时,它神奇地出现了!(本例为链接对象。)嵌入对象相同,只是Excel电子表格不存在于外部文件中,电子表格的数据包含在PowerPoint文件中

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

OLE1构建于DDE之上,DDE使用窗口消息在源数据更改时通知应用程序,通常使用HGLOBAL全局内存句柄传递数据

OLE 2是基于COM构建的

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

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

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


ActiveX控件是COM对象的一个营销术语,从Microsoft试图普及扩展web应用程序的技术时起就开始了。

OLE不是COM进化而来的。Ole 1早于COM。然而,OLE2是基于COM构建的。OLE结构化存储仍然存在并将永远存在,如果您愿意,可以从.Net使用它。请注意,OLE结构化存储与ZIP之类的存储相比,其许多设计动机是允许就地修改磁盘上的数据结构。随着软盘和慢硬盘的终结,这一点已经基本消失了。“OLE1早于COM.OLE2是建立在COM之上的。”是的。。。有点像是进化出来的。在交互数据和数据+行为之间使用接口的想法来自OLE,是COM的萌芽。@Ben-您在引用中颠倒了COM和OLE的顺序,与答案实际所说的相反。@MartinSmith,是的,是一个拼写错误。@Ben我重复了这个拼写错误,因为您似乎对我在答案中所说的内容感到困惑。如果你不是,那么你怎么能看不到COM接口来自推动OLE2嵌入到组件化软件的下一步的命令?