百科问答小站 logo
百科问答小站 font logo



ActiveX、OLE、COM 之间的关系到底是什么样的? 第1页

  

user avatar   yao-dong-27 网友的相关建议: 
      

COM是一套语言无关的二进制接口规范,它定义了一套实现面向对象的组件的规则。

GUID,IID,IUnknow,IDL,都是COM规范定义的概念,它规定了对象接口如何声明,对象如何创建销毁,对象生命周期如何管理,接口如何继承和聚合。

OLE 2(OLE1已经死了)是基于COM接口的一套应用程序直接实现数据交换和协作的规范,主要用于Office系列。

ActiveX是基于COM接口的UI 组件规范,主要用来实现语言无关的可视控件,多用于浏览器和快速应用开发领域比如 VB。

此外还有几个基于COM的框架,比如 DirectX,Media Foundation等。

从Unix开始系统API一直都是以C API形式提供的,但是目前应用开发已经几乎都是面向对象语言了,纯 C 形式的系统API已经不再适应需求,有的解决方案是在C API之上封装面向对象的接口,比如Qt MFC,有的厂商则自己开发基于面向对象的系统API,这方面Apple做得最早也最好,Android则是借用了Java API,但是NDK还是C API。微软很早以前就在试图用面向对象接口替代 C 形式的 Win32 API,COM就是因此诞生的,但是由于历史包袱和业务复杂度的原因,这个进展十分缓慢,只能在保留旧有API兼容的情况下,新API尽量采用COM。直到最新的WinRT,微软更换系统API的工作算是接近完成了,但是WinRT的普及程度还是不够高。


user avatar   jiangshengvc 网友的相关建议: 
      

因为市场部改过名的原因,COM、OLE和ActiveX的含义不同的人有不同的观点。写维基百科的人估计搞混了,应该挂{{来源请求}}模板,但是从版本历史来看,这内容是10年前一个IP用户加的,作者出来澄清的可能性基本为0,还是自己动手改比较快。顺便说一下这就是写论文不能引用维基百科的原因……可以随便改。

历史上发展过程是OLE 1.0 ->COM ->OLE 2.0->ActiveX这样所以你只提OLE不提版本的话文章看起来是有问题的。当然微软的COM文档八百年不更新没有迎合市场部的时尚也有责任就是。看看微软怎么说的吧(不想把脑袋搞迷糊的人可以跳过):

An ActiveX control is essentially a simple OLE object that supports the IUnknown interface --

Overview of Control and Control Container Guidelines (COM)

这篇MSDN文档的作者认为ActiveX控件是一种比较简单,支持了IUnknown的OLE对象。

ActiveX control is just another term for an "OLE Object" or "Component Object Model (COM) Object." --

INFO: Difference Between OLE Controls and ActiveX Controls

Q159621这篇微软知识库文章的作者认为ActiveX=OLE对象=COM对象(咦,上面不是说等于OLE对象的简单版本么?难道OLE对象的复杂度=0所以简不简化结果都是一样的?)。然后又接着说OLE对于市场部来说是object linking and embedding only的意思了而不是再指ActiveX控件。可以预计这会把一些程序员搞迷糊……

COM is the foundation technology for Microsoft's OLE (compound documents), ActiveX (Internet-enabled components), as well as others. ---

The Component Object Model (COM)

这篇MSDN文档的作者认为OLE就是复合文档 (嗯所以MFC对话框程序要支持跨应用拖放得调用OleInitialize一定是我的幻觉……),而ActiveX是面向因特网的组件(然而从VBX移植而来的那些ActiveX明明是为Visual Basic设计的啊喂,有些甚至加了kill bits主动声明自己不支持在网页里面跑)。

都是改名部惹出来的祸。

不想把脑袋搞迷糊的人可以直接看这里

OLE是一个通讯规范。OLE 1.0的时候COM还不存在,通讯的时候用的是DDE,所以OLE曾经不是基于COM的。OLE 2.0就是基于COM了。考虑到OLE 1.0现在已经基本没人用了,说OLE是基于COM也没有什么问题。微软目前提到OLE的时候一般是特指复合文档(比如在WordPad里面插入MSPaint这样),除非加一个2.0后缀。一些人继续用OLE这个名称称呼所有OLE旗下的技术(ActiveX,剪贴板对象,拖放支持等等)。

ActiveX控件是OLE 2.0的简化版本,但是微软市场部又用ActiveX这个名字推广了Active Scripting和Active Document等等其他浏览器扩展技术,所以造成歧义(

Microsoft Announces ActiveX Technologies

)。现在提到ActiveX,一般是特指面向Internet Explorer网页开发者而开发,和java小程序有竞争的控件。广义的ActiveX就是所有COM对象了。




  

相关话题

  为什么Windows会显示这种奇怪字体? 
  Windows 的注册表是个好的设计吗? 
  几个 G 大的 Windows 操作系统纯代码核心部分有多大? 
  微软 Windows 12 计划 3 月份开始开发,对此你有哪些期待? 
  win10 动作录制? 
  Win10 将永久删除 FlashPlayer ,必须要 flash 时怎么办?可以用什么来替代它? 
  微软为什么不推出纯文本模式的Windows server? 
  为什么有相当一部分人都不愿意打开微软的自动更新? 
  程序在地址空间中的位置是何时,以及如何决定的? 
  Windows源代码值得保密吗,难道不能集中一群民间电脑高手,大家合作,反编译出源代码? 

前一个讨论
怎么理解「产品是演化出来,而非规划出来的」?
下一个讨论
美国农民的生活状态是怎样的?





© 2024-11-25 - tinynew.org. All Rights Reserved.
© 2024-11-25 - tinynew.org. 保留所有权利