XPCOM指南-3_组件的内部结构.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
XPCOM指南-3_组件的内部结构

组件的内部结构 — Component Internals 前面章节从客户使用角度描述了XPCOM组件,本章从开发者角度讨论组件。 请仔细阅读,XPCOM组件是怎么实现的,你可以略过本章到下一章节,从下一章节开始将会一步一步创建WebLock组件。 1. 用C++创建组件 让我们用C++开始XPCOM之旅吧。 XPCOM的大多数组件是用C++写的,然后编译为共享库(在windows下是DLL,Unix下是DSO)。 下面的图显示了包含组件实现代码的共享库和XPCOM framework 之间的关系。 在这个图里,外边界是共享库模块,模块里定义了一个组件。 图 A Component in the XPCOM Framework 当你以库的形式编译一个组件或模块的时候,这个库必须到处一个函数:NSGetModule。 这个函数时访问库的入口点。 它在组件注册或注销的时候被调用,当XPCOM想发现模块/库实现了哪些接口时,也会调用。 在本章中将对这个过程做个大概描述。 正如文章“A Component in the XPCOM Framework”所描述,除了NSGetModule入口点,用于组件实际创建的nsIModule 和 nsIFactory接口,字符串,和XPCOM glue部分,将在后面(参见 XPCOM Glue)进行详细描述。 后面是一些为了方便开发的使用工具,比如智能指针,泛型模块支持,以及简单的字符串实现。 最大的也可能是最复杂的一个组成部分是组件本身的专用代码。 组件到底在哪儿呢? 组件放在模块里,模块在共享库文件里定义,一般它放在XPCOM应用程序的 components路径下面。 对于典型的Gecko安装,已经把一些包含了组件的库放在了components路径下,包括网络访问,布局,跨平台的UI界面,等等。 2. XPCOM 初始化 要明白你的组件库什么时候,为什么被调用,你就需要弄明白XPCOM的初始化进程。当一个应用程序启动时,它会初始化XPCOM。XPCOM初始化事件可能由用户的某个操作触发,也有可能由应用程序启动时自己触发。 一个嵌入了Gecko的浏览器,可能在启动时通过嵌入式API的调用触发XPCOM的初始化。 另一个程序可能推迟XPCOM的初始化,直到它第一次需要使用XPCOM时。 在上面的任意一种情况下,XPCOM内部的初始化顺序是一样的。 XPCOM在应用初始化它后就启动了。 在启动时一些参数可以被传递给XPCOM,包括自定义特别路径(如组件路径)的位置。 这样可以指定XPCOM搜索组件的路径。 2.1 XPCOM 启动步骤 XPCOM的启动遵循下面六个步骤: 应用程序启动XPCOM XPCOM发送开始启动的通知 XPCOM发现和处理组件清单 XPCOM发现和处理类型库 清单 如果XPCOM发现了新的组件,XPCOM注册它 XPCOM调用autoregistration ,启动自动注册 XPCOM注册新组件 XPCOM调用autoregistration结束 完成XPCOM启动,XPCOM通知启动过程结束 组件和类型库清单在下面章节描述,“XPCOM Registry Manifests” 2.2 XPCOM Manifests XPCOM使用特殊文件跟踪和信息。有两种类型的跟踪XPCOM组件: 但正在努力将它从这个位置中移除以达到减弱以应用为中心(更以用户为中心)这些类型库文件都位于XPCOM可脚本化的核心并且是二进制的XPCOM组件结构模块接口提供另一个抽象允许多个工厂对象。从组件库,那里是只有单一的入口点,NSGetModule()。此入口点可任意数量的工厂,并从那里, XPCOM 对象。 这个库就是glue库。 它为你的组件和XPCOM之间,提供了一个桥,或者说是连接(glue)层。 XPCOM内置了glue库的一个版本,当你的组件使用了它,他就会链接到这个库:它直接包含了这些没有冻结的库的一个拷贝,这样XPCOM库版本的改变就不会影响到她。 你可以根据你的需要剔除不需要的片段。 3.2 XPCOM字符串类 XPCOM使用nsAString和nsACString等一些类作为基础的字符串类型。 这些类在Mozilla字符串指南里进行了描述(参见 Gecko Resources)。 这些字符串类提供了另外一个辅助类集合,他们在XPCOM里是没有冻结的。 很多组件和嵌入式应用需要链接到一些字符串类,但是这些代码太复杂,甚至比Glue的代码还要大。基于此,我们为开发者实现了一些轻量级的字符串类:nsEmbedString和nsEmbedCString。这些实现提供了nsAString/nsAString功能的最小集合。 在你的组件里,你可以通过使用nsEmbedString或其他类来

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档