COM/OLE/ActiveX/IDispatch混淆

Ofe*_*lon 7 com activex ole idispatch

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

COM和ActiveX是同义词吗?

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

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

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

维基百科提供了一些见解,但并不多.我找不到更深入的参考资料.

Ofe*_*lon 8

COM Programming by Example中找到一些引用:

你很快就会发现COM的另一件事是营销有一个带有术语的实地旅行日.而不是帮助促进理解,你会发现在大多数情况下它会促进神秘感.... OLE,ActiveX,远程对象 - 这一周意味着什么?...

COM从特定问题的解决方案演变而来 - 如何允许文字处理器在字母中编辑电子表格而无需用户退出文字处理器来执行此操作.这个解决方案叫做OLE....但是,随着OLE(OLE2)的第二个版本,其创建者修改OLE32.DLL以暴露OLE的更多基本功能,以便其API可用于允许任何应用程序访问另一个的功能.这个API自1993年以来没有太大变化,被认为是COM API....

一旦COM API暴露出来,Microsoft就用它来创建当时称为OLE控件的东西,以允许Visual Basic应用程序访问用Visual C++编写的复杂控件(例如,旋转的按钮,播放音乐的列表框).最终,使用相同的技术允许Web浏览器下载和使用控件.此时,名称更改为ActiveX控件或纯粹出于营销原因而仅仅是纯ActiveX.虽然您可以在ActiveX控件中打包任何功能,但它的需求专门用于支持用户界面控件.

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

谢谢你的回答!


Jas*_*n S 5

ActiveX 是 COM 的营销术语,尽管 ActiveX 通常用于作为 GUI 对象的“ActiveX 控件”的上下文中。

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

OLE 是早期版本的 COM。