COM / OLE / ActiveX / IDispatch混淆

时间:2009-05-04 15:36:58

标签: com activex ole idispatch

我无法理解这些术语之间的差异。

是COM和ActiveX同义词吗?

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

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

OLE适合哪里?它(可观)是否存在于MFC命名和MSDN中 - 所有这些只是遗留下来的?

Wikipedia提供了一些见解,但并不多。我找不到更深入的参考资料。

3 个答案:

答案 0 :(得分:8)

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 :(得分:4)

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

IDispatch是由COM对象实现的接口,因此客户端程序可以在运行时动态调用其方法(后期绑定),而不是在编译时需要提前知道所有方法和参数类型的

OLE是COM的早期版本。

答案 2 :(得分:1)

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

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