我很难理解XPCOM。它与COM有什么不同?它如何实现跨平台?
它是一个框架,有一套库可以用来完成一些工作吗?
另外,组件对象模型是否意味着每个功能都在组件中实现,因此我们可以在不知道详细实现的情况下使用它?
请问有人能帮助我理解这个问题吗? 谢谢, Chan。
我不太理解XPCOM。它和COM有什么不同之处?
XPCOM 是 Mozilla 自己的、跨平台(因此有“XP”这个词)版本的 COM。
它是如何实现跨平台的?
XPCOM 实现在一个库中,这个库由 Mozilla 开源项目的贡献者移植到了许多平台上。你可以为任何想要的平台构建它或下载二进制文件,并且,在极端偏僻的情况下,如果你想在一个尚未支持的平台上使用它,自行移植应该很简单。
另外,组件对象模型是否意味着每个功能都是在组件中实现的,因此我们可以在不知道详细实现的情况下使用它?
没错,说得对。这个想法是实现一种语言无关的框架,使得不同的组件能够相互通信和交互,而不需要了解任何特定组件所实现的语言的特殊知识。例如,JavaScript 代码可以调用 C++ 代码。
这是通过组件发布定义良好的接口实现的,使用一种称为 IDL 的语言(或者在 XPCOM 的情况下,XPIDL)。这些接口利用在每个支持语言中具有映射的定义良好的类型。每个接口都继承自一个公共基础接口,该接口提供了标准方法以进行引用计数和类型推断(在 COM 中称为IUnknown
,在 XPCOM 中称为 nsISupports
)。
关于在线资源,MSDN(COM相关)和MDC(XPCOM相关)都有专门的区域。如果您想真正理解COM的动机以及其为什么会是这样的,请阅读Don Box的Essential COM。当然,如果您有任何需要回答的具体问题,您也可以在这里提出。