- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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或其他类来
您可能关注的文档
- 团日活动解说稿.doc
- OG语法重点汇总.doc
- 电子电工教研组工作计划.doc
- 实验42-温度特性.ppt
- 09年下期《中级经济法》考查A卷.doc
- 定远中学2009-2010高二第七次月考.doc
- 和谐之家建设要求.doc
- 2011.3月汇报.doc
- 湖南省2012年会计从业资格无纸考试题目(电算化第四套).doc
- 给排水、电气安装具体要求.doc
- 2022年11月连江县直机关遴选公务员面试真题带答案详解.docx
- 2022年11月遵义市直遴选面试真题回忆版.docx
- 2022年2月伊春市税务系统遴选面试真题回忆版.docx
- 2022年11月朔州市税务系统遴选面试真题回忆版汇总.docx
- 2022年2月秦皇岛市税务系统遴选面试真题回忆版汇总.docx
- 2022年2月焦作市直机关遴选公务员面试真题附详解.docx
- 2022年11月黑龙江省直机关遴选公务员面试真题附详细解析.docx
- 2022年2月潍坊市直机关遴选公务员面试真题附解析.docx
- 2022年2月大同市直遴选面试真题附详解.docx
- 2022年2月巴音郭楞蒙古自治州直机关遴选公务员面试真题带题目详解.docx
最近下载
- 微能WIN-9变频器说明书使用手册.pdf
- 支气管扩张临床路径.docx VIP
- 长方体、正方体表面积和体积专项练习50题(有答案)ok .pdf VIP
- 吉林省长春市东北师范大学附属中学净月实验学校2023-2024学年高一上学期期中质量监测数学试卷(解析).docx VIP
- 2025至2030年中国拉面粉行业投资前景及策略咨询研究报告.docx
- 人教版一二三年级生字表(全) .pdf VIP
- 22J403-1 楼梯 栏杆 栏板(一) (3).pdf VIP
- 高校学科建设的概念与内涵 .pdf VIP
- T∕ZZB 1299-2019 电动剃须刀用提拉须圆刀.docx VIP
- 鲁教版五四制六年级数学下册第七章达标检测卷附答案 .pdf VIP
文档评论(0)