我不能理解这些术语之间的区别。
COM和ActiveX是同义词吗?
ActiveX对象只是一个公开IDispatch的COM对象吗?
许多较旧的MSDN页面只提到IDispatch,而没有任何COM上下文。它是否有单独的历史,并且是在其生命周期的后期在COM的“保护伞”下引入的?
OLE适合在哪里?它在MFC命名和MSDN中的(相当大的)存在--所有这些都只是遗产吗?
Wikipedia提供了一些见解,但不是很多。我找不到更深入的参考资料了。
发布于 2009-05-05 07:30:40
找到一些来自COM Programming by Example的引文
你很快就会发现COM的另一件事是,市场营销有一个关于术语的实地考察。你会发现,在大多数情况下,它不是帮助促进理解,而是促进神秘感。..。OLE,ActiveX,Remotable Objects -这周哪一个意味着什么?
COM从一个特定问题的解决方案发展而来-如何允许文字处理器编辑信件中的电子表格,而用户不必退出文字处理器即可完成此操作。这种解决方案被称为OLE。..。但是,随着OLE的第二个版本(OLE2)的发布,其创建者修改了OLE 32.DLL,以公开OLE的更多基本功能,以便其应用程序接口可用于允许任何应用程序访问另一个应用程序的功能。此API自1993年以来没有太大变化,它被认为是COM API。..。
一旦COM API公开,微软就用它来创建后来被称为OLE控件的东西,以允许Visual Basic应用程序访问用Visual C++编写的复杂控件(例如,螺旋按钮、播放音乐的列表框)。最终,同样的技术被用于允许控件被下载并由您的web浏览器使用。在这一点上,名称更改为ActiveX控件或只是纯粹的ActiveX纯粹是出于市场原因。虽然您可以在ActiveX控件中打包任何功能,但它的要求已经专门用于支持用户界面控件。
我仍然对最后一句话感到好奇- COM对象必须满足一些附加要求才能符合ActiveX控件的要求?-但这足以让它消失。
感谢您的回答!
发布于 2009-05-04 15:49:38
ActiveX是COM的营销术语,尽管ActiveX通常用在"ActiveX控件“的上下文中,即图形用户界面对象。
IDispatch是一个由COM对象实现的接口,这样客户端程序就可以在运行时(后期绑定)动态调用它的方法,而不是在编译时需要提前知道所有方法和参数类型。
OLE是COM的早期版本。
发布于 2009-05-04 16:36:22
关于OLE: COM起源于OLE。但今天,OLE可能被认为是建立在COM之上的,并且主要用于其名称所暗示的--文档链接和嵌入。虽然COM本身只定义了几个接口(IUnknown、IClassFactory、IMalloc等),但OLE添加了一大堆额外的接口,如IMoniker、IOleItemComtainer等。
总而言之: COM是基础,ActiveX和OLE是COM的顶层。
https://stackoverflow.com/questions/820614
复制相似问题