COM和OLE有什么区别?

COM和OLE有什么区别?

  • OLE =对象链接和embedded
  • DDE =dynamic数据交换
  • COM =组件对象模型

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

您可以将Excel,Word和Powerpointembedded到链接的对象中。 其他应用程序是专门为支持embedded到Word中而编写的,例如Microsoft公式编辑器。

OLE 1build立在DDE上,它使用Windows消息通知应用程序,当源数据改变时,通常使用HGLOBAL全局内存句柄传递数据。

OLE 2build立在COM上。

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

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

然而, OLE控件与OLE相关。 它们是主要针对VB 4以后的Visual Basic用户的可视化组件,但是使用OLE 2的embedded工具来提供可视化的元素。它们也可以由托pipeOLE 2的任何东西托pipe(理论上,如果写得好的话)embedded式对象,也经常在C ++应用程序中使用。 它们通常使用OLE自动化兼容接口在运行时进行编程。

从微软试图普及扩展Web应用程序的技术时起, ActiveX控件就是COM对象的营销术语。

COM是OLE发展的。 OLE是一组接口和数据存储机制,以方便在应用程序之间共享数据。 COM是使用接口的自然延伸,不仅用于共享数据,而且还有运行时function – 数据被实际机制所支持以方便使用。 我总是把它描绘成C和C ++之间的区别,在C中你可以共享头文件和结构,并且用C ++共享封装的对象。

作为一个肥皂盒,我仍然错过OLE结构化存储,因为在协作系统之间共享不透明的数据存储是件好事。 看到拖放/剪贴板仍然依赖于它,我不知道.netreplace将是什么?

OLE技术早于COM作为一个独立的实体大量的时间。 在此之前,OLE被实现为一种embedded和链接对象的方式。 典型的例子是在Word文档中embedded电子表格。 COM的底层技术已经启用,所以VB等其他语言也可以与这些对象交互。

然后,历史上,我们有很多服务器types的程序员正在看着像语言独立,引用计数和线程模型羡慕这些很酷的东西,但真的不关心embedded技术太多。 合乎逻辑的做法是将底层服务器function拆分为COM–这是一个更自然的低级API。

这两种技术依然存在。 OLE与ActiveX最近有些相似,或者可能与ActiveX相同。