【问题标题】:COM / OLE / ActiveX / IDispatch confusionCOM / OLE / ActiveX / IDispatch 混乱
【发布时间】:2010-10-23 15:58:59
【问题描述】:

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

COM 和 ActiveX 是同义词吗?

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

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

OLE 适合什么地方?它在 MFC 命名和 MSDN 中的(相当大的)存在是不是都只是遗留问题?

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

【问题讨论】:

    标签: com activex ole idispatch


    【解决方案1】:

    COM Programming by Example找到一些引用:

    另一件你会很快找到的东西 COM 是营销有一个实地考察 天用术语。而不是 帮助促进理解, 你会发现在大多数情况下它会促进 神秘。 ... OLE、ActiveX、远程 对象 - 这是什么意思 星期? ...

    COM 是从解决方案演变而来的 具体问题——如何允许一个词 处理器编辑电子表格 无需用户退出的字母 文字处理器来做到这一点。这 解决方案称为 OLE。 ... 然而, 随着 OLE (OLE2) 的第二个版本, 它的创建者将 OLE32.DLL 修改为 暴露更多的基本功能 的 OLE,以便可以使用其 API 允许任何应用程序访问 另一个的功能。这个API, 自 1993 年以来没有太大变化, 是什么被认为是 COM API。 ...

    一旦 COM API 暴露出来, 微软用它来创造 然后调用 OLE 控件以允许 复杂的控件(例如,按钮 那个螺旋,播放的列表框 音乐)用 Visual C++ 编写 Visual Basic 可访问 应用程序。最终这同样 技术被用来允许控制 供您的网络下载和使用 浏览器。此时,名称 更改为 ActiveX 控件或只是 纯 ActiveX 纯粹用于营销 原因。虽然你可以打包任何 ActiveX 控件中的功能, 它的要求是 专门用于支持用户 界面控制。

    我仍然对最后一句话感到好奇——COM 对象必须满足一些额外的要求才能成为 ActiveX 控件吗? - 但它足以放手。

    感谢您的回答!

    【讨论】:

    • "COM 对象必须满足一些附加要求才能成为 ActiveX 控件" 是。不过,我不确定它们是什么。可能只是它必须实现一些特定的接口。
    • 没有严格的规范。甚至文档都说,当 ActiveX 控件没有实现接口时,容器应该优雅地降级。
    • ActiveX 控件的原始规范具有使控件在 Internet Explorer 和/或 Visual Basic 中有用所需的接口。但随着时间的推移,这些接口集发生了变化,应用程序对缺少接口的容忍度更高,因此最终任何支持 COM IUnknown 接口的东西都可以被视为 ActiveX 组件。
    【解决方案2】:

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

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

    OLE 是早期版本的 COM。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2010-12-17
      • 2014-04-12
      • 2012-10-17
      • 2010-12-16
      • 2011-11-23
      • 1970-01-01
      • 2011-01-07
      • 2011-12-25
      相关资源
      最近更新 更多