XPCOM指南-5使用XPCOM实用工具简化XPCOM编写.docVIP

XPCOM指南-5使用XPCOM实用工具简化XPCOM编写.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
XPCOM指南-5使用XPCOM实用工具简化XPCOM编写

使用XPCOM实用工具简化你的生活 本章回顾你已经在教程第一部分建立的代码 (see webLock1.cpp in the previous chapter) 并且使用 XPCOM 工具类让代码更容易更有效. 同时,介绍一个在XPCOM和Gecko API中广泛使用基本的字符串类型作为起点,第一部分描述可以替代webLock1.cpp中的很多代码的C++ 宏. 很多用来完成软件组织和组件注册的代码都可以缩减为精简的数据结构和宏代码 1. XPCOM 宏 为了让C++开发简单些,XPCOM框架提供了大量的宏。 尽管有些重叠(例如,高层的宏可以用其他的宏来组织),他们通常可以组织成如下的类别 前一章节,对从头创建一个常规组件要做的工作进行了详细描述。 但是输入的代码太多了,且这些代码里只有很小一部分是WebLock独有的。 怎么提高你的效率,让你在创建一个新的组件库时,只需要把代码复制过去,做较小的改动就可以重复利用呢! XPCOM提供一些列的module 宏来解决这个问题。 这些宏编译时展开为“通用”的实现,他们不会为你写你的组件提供更多的柔韧性。 他们优点在于可以让你快速开发。 这一点,你比较下面的weblock2.cpp和前一章的weblock1.cpp。 Module宏包含了一组定义NSGetModule入口点(输出函数)的宏,这需要nsIModule实现代码和为你的实现类创建一个通用的工厂。 通过使用这些宏,大多数与你组件自生功能不相关的代码可以实现(如工厂实现)。 注意,本节描述的这些宏看起来都有些相似,请仔细区分,他们适合于不同的场景。 有些宏可能只是在模块创建或销毁的时候调用了某个函数。 下表列出了本节讨论的宏。 XPCOM Module Macros 宏 描述 NS_IMPL_NSGETMODULE(name, components) 实现组件的 nsIModule 接口,参数是组件的名字和要实现的组件的列表 NS_IMPL_NSGETMODULE_WITH_CTOR(name, components, ctor) 与上面宏功能一样,但是可以在模块创建后,调用传入的函数 NS_IMPL_NSGETMODULE_WITH_DTOR(name, components, dtor) 与第一个宏功能一样,但是可以在模块销毁时,调用传入的函数 NS_IMPL_NSGETMODULE_WITH_CTOR_DTOR(name, components, ctor, dtor) 第二和第三个宏的组合 模块实现宏 一般情况下,使用NS_IMPL_NSGETMODULE宏就可以了,不需要任何回调,但是所有宏都遵循相同的模式。 这些宏的所有工作都是针对components参数表示的组件数组。每一个结构描述了一个要注册到XPCOM的CID。 这些宏的第一个参数表示模块的名字。 在调试环境下,当组件加载或卸载的时候,这个字符串会打印在屏幕上。 你用该使用一个友好的名字。 下一个参数结构体包含了下面四部分信息: 人可识别的类名 类ID(CID) 契约ID (an optional but recommended argument) 对象的构造函数 static const nsModuleComponentInfo components[] = { { Pretty Class Name, CID, CONTRACT_ID, Constructor }, // ... }; 需要注意的是,这个宏可以支持在一个模块里创建多个组件。 例如,Gecko里的网络库(“necko”)在他的nsModuleComponentInfo 数组里,就包含了操作50个组件。 nsModuleComponentInfo 结构的第一个参数是组件的名字。 现在这个参数没有什么实际的用途,仅仅是组件的简要描述信息。 nsModuleComponentInfo 结构的第二个参数是CID。这个通常用#define进行申明。 格式如下所示: #define NS_IOSERVICE_CID \ { /* 9ac9e770-18bc-11d3-9337-00104ba0fd40 */ \ 0x9ac9e770, \ 0x18bc, \ 0x11d3, \ {0x93, 0x37, 0x00,

文档评论(0)

canggu808866 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档