COM/OLE/ActiveX/IDispatch

COM/OLE/ActiveX/IDispatch,com,activex,ole,idispatch,Com,Activex,Ole,Idispatch,我无法理解这些术语之间的差异 COM和ActiveX是同义词吗 ActiveX对象只是公开IDispatch的COM对象吗 许多旧的MSDN页面提到IDispatch,但没有任何COM上下文。它是否有一个单独的历史,并且在其生命周期的后期刚刚在COM“保护伞”下引入 奥立在哪里?它在MFC命名和MSDN中的(相当大的)存在是否仅仅是传统 提供了一些见解,但不多。我找不到更深入的参考资料。ActiveX正在销售ese for COM,尽管ActiveX通常用于作为GUI对象的“ActiveX控件”

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

COM和ActiveX是同义词吗

ActiveX对象只是公开IDispatch的COM对象吗

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

奥立在哪里?它在MFC命名和MSDN中的(相当大的)存在是否仅仅是传统


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

ActiveX正在销售ese for COM,尽管ActiveX通常用于作为GUI对象的“ActiveX控件”上下文中

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


OLE是COM的早期版本

关于OLE:COM源于OLE。但今天,OLE可能被认为是建立在COM之上的,并且主要用于其名称所暗示的——文档链接和嵌入。虽然COM本身只定义了几个接口(IUnknown、IClassFactory、iAlloc等),但OLE添加了大量额外的接口,如IMoniker、iOleitemComContainer等

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

< P>发现了一些引用:

你很快就会发现另一件事 COM是营销部的一次实地考察 每天都要学习术语。不如 有助于增进了解, 你会发现,在大多数情况下,它促进 神秘。。。OLE、ActiveX、远程 对象-这是什么意思 星期

COM从解决方案演变为 具体问题-如何允许一个单词 处理程序,以在 用户不必退出的信件 文字处理器来做这件事。这 解决方案称为OLE。。。然而, 随着OLE(OLE2)的第二次发布, 它的创建者将OLE32.DLL修改为 公开更多的基本功能 这样就可以使用它的API了 允许任何应用程序访问 另一个的功能。这个API,, 自1993年以来变化不大, 是什么被认为是COM 应用程序编程接口。

一旦暴露了COM API, 微软用它创造了我们想要的东西 然后调用OLE控件以允许 复杂的控制装置(如按钮 那个螺旋形的列表框 用Visual C++编写的音乐 可访问Visual Basic 应用。最终还是这样 技术被用来进行控制 供您的网站下载和使用 浏览器此时,名称 更改为ActiveX控件或仅 纯广告营销 原因。尽管你可以打包任何东西 ActiveX控件中的功能, 它的要求一直在提高 专门用于支持用户的 接口控制


我仍然对最后一句话感到好奇——COM对象必须满足一些附加要求才能成为ActiveX控件吗但这足以让它过去


谢谢你的回答

“COM对象必须满足某些附加要求才能成为ActiveX控件”是。不过,我不确定它们是什么。可能只是它必须实现一些特定的接口,这方面没有严格的规范。即使是文档也说,如果ActiveX控件没有实现接口,容器也应该优雅地降级。ActiveX控件的原始规范具有使控件在Internet Explorer和/或Visual Basic中有用所需的接口。但是这些接口集随着时间的推移而改变,应用程序对丢失的接口变得更加宽容,因此最终任何支持COM IUnknown接口的东西都可以被视为ActiveX组件。我目前正在研究一个类似的主题,在此期间,我发现了两个可能有用的链接:“…换句话说,一个控件,至少,是一些COM对象,它支持IUnknown接口,并且是自注册的'