2009-05-04 45 views
6

我不能笼络这些术语之间的差异。COM/OLE/ActiveX/IDispatch混淆

COM和ActiveX同义词吗?

ActiveX对象只是一个公开IDispatch的COM对象吗?

许多较旧的MSDN页面提到没有任何COM上下文的IDispatch。它是否有单独的历史记录,并且刚刚在其生命周期后期的COM'保护伞'下引入?

OLE在哪里适合?在MFC命名和MSDN中是否存在(相当多) - 都只是遗留问题?

Wikipedia给出了一些见解,但不是很多。我找不到更深入的参考资料。

回答

7

找到一些报价从COM Programming by Example

你很快就会与 COM发现的另一件事情是,市场有一个实地考察 一天的术语。而不是 帮助促进了解, 你会发现在大多数情况下,它促进 的神秘。 ... OLE,ActiveX,Remotable 对象 - 哪一个意思是这个 周? ...

COM演变出解决一个 特定的问题 - 如何让一个字 处理器编辑电子表格在 信,而无需退出 字处理器做它的用户。这个 解决方案被称为OLE。 ......然而, 与OLE(OLE2)的第二个版本, 它的创造者修改OLE32.DLL到 暴露更多的OLE的基本功能 以便其API可用于 允许任何应用程序接取的 另一个功能。这个API,自1993年以来没有太大变化, 被认为是COM API。 ...

一旦COM API被曝光后, 微软用它来创造什么是 然后叫OLE控件允许 复杂的控制(例如,按钮 是螺旋,列表框发挥 音乐)用Visual C++是 可通过Visual Basic 应用程序访问。最终使用相同的技术 允许控制器 被下载并被您的网络浏览器 使用。此时,名称 更改为ActiveX控件或仅用于纯粹用于营销 原因的 纯ActiveX。虽然您可以将任何 功能封装在ActiveX控件中,但它的需求已被 专门用于支持用户接口控制。

我仍然对最后一句话感到好奇 - COM对象是否必须满足一些额外的要求才能作为ActiveX控件? - 但它足以让它走了。

感谢您的回答!

+1

“必须满足某些COM对象满足一些额外要求才有资格成为ActiveX控件”是的。不过,我不确定它们是什么。这可能只是它必须实现一些特定的接口。 – 2009-05-05 15:44:48

+1

这没有严格的规范。即使是文档,当ActiveX控件没有实现接口时,容器也应该很好地降级。 – 2010-08-16 20:09:06

+0

ActiveX控件的原始规范具有在Internet Explorer和/或Visual Basic中使控件有用所需的接口。但是随着时间的推移,这些接口组发生了变化,应用程序更容忍丢失的接口,所以最终支持COM IUnknown接口的任何东西都可以被认为是一个ActiveX组件。 – 2015-04-24 19:47:20

4

虽然ActiveX通常用于GUI对象“ActiveX控件”的上下文中,但ActiveX是COM的市场营销工具。

IDispatch是一个由COM对象实现的接口,以便客户端程序可以在运行时动态调用其方法(迟绑定),而不是在编译时所有的方法和参数类型都需要在时间。

OLE是COM的早期版本。

1

关于OLE:COM的根源在于OLE。但是今天,OLE可能被认为是建立在COM之上,并且主要用于顾名思义 - 文档链接和嵌入。虽然COM本身只定义了几个接口(IUnknown,IClassFactory,IMalloc等),但OLE增加了一大堆附加接口,如IMoniker,IOleItemComtainer等。

总结:COM是基础,ActiveX和OLE在COM之上是层。

+0

我目前正在研究一个相似的主题,在此期间我找到了两个可能在此处很有用的链接:http://msdn.microsoft.com/zh-cn/library/aa751972(v=vs.85).aspx #ActiveX_Controls '...换句话说,一个控件至少是一些支持IUnknown接口的COM对象,它也是自注册的'http://support.microsoft.com/kb/159621/en -us – juniper 2011-11-08 19:11:27