源代码下载:HelloWorld示例.rar


在《浅谈基于Mozilla ThunderBird的扩展开发》这篇入门文章中简单介绍了基于Mozllia平台进行扩展开发的基础知识,但仍然欠缺最为重要的一种武器---没错,XPCOM!这篇文章就是为它准备的。

XPCOM是什么?

      这个问题不多做解释了,相信XPCOM对于了解COM技术的人来说很快就可以上手开发了,下列是Mozilla官方给出的一些XPCOM知识的入门资源:

个人尤其推荐IBM developerworks上那5篇文章。

       使用已有的XPCOM

              XPCOM的使用十分简单,Mozilla平台已经为我们提供了许多功能强大的XPCOM组件了,如果你需要某方面功能的组件,请先看看Mozilla平台下是不是已经有对应的了,别再自己造轮子了

           关于这方面也不打算再多说了,有兴趣的朋友可以阅读IBM developerworks下面这篇文章,《实战 Firefox 扩展开发》,相信通过这样一个图片批量下载工具的开发,就会对于Mozilla平台下已有的XPCOM组件的使用有所了解的。


     
So,what's next? 

    没错,自己如何开发XPCOM组件并在扩展中使用。网上对于这方面的资料不是很多,而且没有特别完整的示例,这就是我写这篇文章的目的所在,通过一个简单的XPCOM组件的开发全过程,展示XPCOM组件的内部细节。

组件要实现的功能非常简单,就只提供一个做加法的接口供客户调用。

 long Add(in long a, in long b);

然后在扩展中调用这个加法接口。

 

准备工作

 

0,按照《浅谈基于Mozilla ThunderBird的扩展开发》这篇文章建立起开发扩展的基本环境。  

1、下载Gecko SDK

http://ftp.mozilla.org/pub/mozilla.org/mozilla/releases/mozilla1.8b1/gecko-sdk-i586-pc-msvc-1.8b1.zip 我们需要使用它来对IDL定义进行解释。

2、创建GUID

使用微软的的guidgen 生成GUID,例如b7b04070-45fc -4635- b219-7a172f806bee

4,从C:\mozilla-build\moztools-180compat\bin下拷贝libIDL-0.6.dllglib-1.2.dll\gecko-sdk-i586-pc-msvc-1.8b1\gecko-sdk\bin下,否则运行xpidl会报错.

开发XPCOM组件

1,创建接口文件定义

基于Mozilla平台的扩展开发(续)----XPCOM组件篇#include "nsISupports.idl"
基于Mozilla平台的扩展开发(续)----XPCOM组件篇[scriptable, uuid(b7b04070
-45fc -4635- b219-7a172f806bee)]
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
interface IMyComponent : nsISupports

2、使用Gecko SDK xpidl.exe
      
进入xpidl所在目录,在CMD中输入命令

基于Mozilla平台的扩展开发(续)----XPCOM组件篇xpidl -m header -I ..\idl  IMyComponent.idl(这里应该是IDL定义文件的实际路径)
基于Mozilla平台的扩展开发(续)----XPCOM组件篇xpidl -m typelib -I 
..\idl  IMyComponent.idl
基于Mozilla平台的扩展开发(续)----XPCOM组件篇

如果上面执行有问题的话,可以将

基于Mozilla平台的扩展开发(续)----XPCOM组件篇\gecko-sdk-i586-pc-msvc-1.8b1\gecko-sdk\bin;\gecko-sdk-i586-pc-msvc-1.8b1\gecko-sdk\idl;\gecko-sdk-i586-pc-msvc-1.8b1\gecko-sdk\include;

加入到环境变量的PATH里面去     

如果上述命令执行通过,在\gecko-sdk-i586-pc-msvc-1.8b1\gecko-sdk\bin就会得到IMyComponent.hIMyComponent.xpt 2个文件。

2、创建新文件

根据IMyComponent.h创建文件MyComponent.hMyComponent.cppMyComponentModule.cpp


基于Mozilla平台的扩展开发(续)----XPCOM组件篇


编译XPCOM组件

1、创建工程

使用VC2005,创建新的DLL工程,将IMyComponent.h MyComponent.hMyComponent.cppMyComponentModule.cpp添加到工程中。

 

2、工程配置

基于Mozilla平台的扩展开发(续)----XPCOM组件篇1)c/c++ GeneralAdditional Include Directories 中设置为\gecko-sdk-i586-pc-msvc-1.8b1\gecko-sdk\include
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
2) c/c++Preprocessor Preprocessor Definitions中加入MYCOMPONENT_EXPORTS,XPCOM_GLUE
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
3)c/c++Code GenerationRuntime Library中设置为Multi-threaded DLL (/MD)
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
,这里非常重要,否则编译会报错的!!。
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
4)LinkerAdditional Liberary Directoryse设置为\gecko-sdk-i586-pc-msvc-1.8b1\gecko-sdk\lib
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
5)Linker Additional Depenendies加入nspr4.lib plds4.lib plc4.lib xpcomglue.lib
基于Mozilla平台的扩展开发(续)----XPCOM组件篇

3、编译生成MyComponent.dll

在扩展中使用XPCOM组件

 

对《浅谈基于Mozilla ThunderBird的扩展开发中的helloworld项目进行修改,加入一个文件夹components和一个安装文件install.js
基于Mozilla平台的扩展开发(续)----XPCOM组件篇

   关于这两个东西具体的含义这里就不多做介绍了,简单点说
,intall.js就是把XPCOM组件注册到Mozilla平台中去,就类似于Windows的注册表一样,从而可以使用组件。

1Install.js的内容:

基于Mozilla平台的扩展开发(续)----XPCOM组件篇// Install script for helloworld
基于Mozilla平台的扩展开发(续)----XPCOM组件篇

基于Mozilla平台的扩展开发(续)----XPCOM组件篇
var err;
基于Mozilla平台的扩展开发(续)----XPCOM组件篇const APP_VERSION
="0.0.0.1";//版本号
基于Mozilla平台的扩展开发(续)----XPCOM组件篇

基于Mozilla平台的扩展开发(续)----XPCOM组件篇
//初始化安装
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
err = initInstall("helloworld"+APP_VERSION,  // name for install UI
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
                  "/helloworld",               // registered name
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
                  APP_VERSION);              // package version
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
if(err!=0)

2)在Componts文件夹中加入MyComponent.dllIMyComponent.xpt


3
)修改overlay.js如下:

基于Mozilla平台的扩展开发(续)----XPCOM组件篇// This is the main function
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
const ENIG_C = Components;
基于Mozilla平台的扩展开发(续)----XPCOM组件篇const ENIG_ENIGMAIL_CONTRACTID 
= "@mydomain.com/XPCOMSample/MyComponent;1"
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
var gEnigmailSvc = null;
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
基于Mozilla平台的扩展开发(续)----XPCOM组件篇
function helloWorld()


好了,到此就完成了这个最简单的
XPCOM组件的开发了,enjoy it!

Reference


1,VCXPCOM

2, http://enigmail.mozdev.org/home/index.php


需要完整代码的,请发email至phinecos@163.com,也欢迎有兴趣的朋友们一起来交流Mozilla的扩展开发技术

相关文章:

  • 2021-07-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-03-06
  • 2021-10-01
  • 2021-08-06
  • 2021-09-16
  • 2021-09-09
相关资源
相似解决方案