我无法理解这些术语之间的差异。
是COM和ActiveX同义词吗?
ActiveX对象只是一个公开IDispatch的COM对象吗?
许多较旧的MSDN页面提到没有任何COM上下文的IDispatch。它是否有单独的历史记录,并且刚刚在其生命周期的后期在COM“保护伞”下引入?
OLE适合哪里?它(可观)是否存在于MFC命名和MSDN中 - 所有这些只是遗留下来的?
Wikipedia提供了一些见解,但并不多。我找不到更深入的参考资料。
答案 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之上的层。