10

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

COM 和 ActiveX 是同义词吗?

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

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

OLE 在哪里适合?一般而言,它在 MFC 命名和 MSDN 中的(相当大的)存在 - 都只是遗留问题吗?

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

4

3 回答 3

9

从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 控件吗?- 但它足以放手。

感谢您的回答!

于 2009-05-05T07:30:40.417 回答
5

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

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

OLE 是 COM 的早期版本。

于 2009-05-04T15:49:38.043 回答
1

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

综上所述:COM是基础,ActiveX和OLE是COM之上的一层。

于 2009-05-04T16:36:21.940 回答