百科问答小站 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对象了。




  

相关话题

  如何看待 Apple Mac 将无法支持最新微软 Windows 11 操作系统? 
  苹果麦金塔操作系统(macOS)比微软视窗操作系统(Windows) 好用吗? 
  为何微软不在新的操作系统中让 32 位支持大于 4GB 的内存? 
  Windows 10 1607 版本更新完成的界面中都有哪些诗词警句? 
  MFC真的过时了吗? 
  为什么 Windows 10 20H1 又将可能采用圆角矩形窗口设计了? 
  微软 CEO 称「下一代 Windows 系统将很快宣布」,你对此有哪些期待? 
  Windows 内核和 Linux 内核谁更复杂? 
  华为的鸿蒙系统可以玩b服的原神吗?如果可以的话能和windows与安卓数据互通吗? 
  现在的笔记本都只能装 Win10 了吗? 

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





© 2025-04-22 - tinynew.org. All Rights Reserved.
© 2025-04-22 - tinynew.org. 保留所有权利