现在的位置: 首页 > 综合 > 正文

XPCOM开发简介

2013年08月04日 ⁄ 综合 ⁄ 共 1537字 ⁄ 字号 评论关闭

1.首先安装GECKO SDK开发包,并解压到本地目录 例如:/home/user/sdk/gecko-sdk/
2.为主接口类创建GUID  uuidgen
2.编写接口文件***.idl
3.分别生成***.h和***.xpt文件(xpidl -m header/typelib -w -o /输出路径/输出文件名 -I /Gecko/IDL所在路径 将要编译的***.idl文件)
4.修改生成的组件的头文件***.h,在开始加入宏保护代码(#ifndef _MY_MYCOMPONENT_H_...),生成一个组件用的GUID,添加下面的行到头文件中
 首先是Contract ID,然后是类名,GUID
 #define MY_COMPONENT_CONTRACTID "@mydomain.com/XPCOMSample/MyComponent;1"
 #define MY_COMPONENT_CLASSNAME  "A Simple XPCOM Sample"
 #define MY_COMPONENT_CID        GUID
5.创建你的组件的头文件****.h,把***.h文件中以/*Header file */开始的那段代码拷贝到此头文件中,替换其中的_MYCLASS_为你的类名
6.创建你的组件的实现文件****.cpp,添加头文件引用
 #include "****.h"
  把***.h文件中以/*Implementation file */开始的那段代码拷贝到此头文件中,替换其中的_MYCLASS_为你的类名,添加实现代码 
6.创建你的组件定义文件****Module.cpp,添加头文件引用
 #include "nsIGenericFactory.h" //Mozilla GenericFactory definitions
 #include "****.h"
  添加NS_GENERIC_FACTORY_CONSTRUCTOR(MyComponent)来定义你的组件的构造器
  为你的组件添加类名,contract ID, GUID定义
 static nsModuleComponentInfo components[] =
 {
  {
   MY_COMPONENT_CLASSNAME,
   MY_COMPONENT_CID,
   MY_COMPONENT_CONTRACTID,
   MyComponentConstructor,
  }
 };
  添加NS_IMPL_NSGETMODULE("****Module",components)用于向Mozilla输出以上定义信息

7.创建makefile,生成****.so
  (Embed:/home/embed/microb-engine/microb-engine/build-tree/mozilla/build/autoconf/make-makefile extentions
   目录名
   会在此目录下生成Makefile文件)

/*embed下不用8,9*/
8.在Mozilla上注册此组件
  拷贝****.so和前面生成的***.xpt到Mozilla的components目录下(~/firefox/components, ~/Mozilla/components)
  运行regxpcom命令,注册组件(可能需要提供组件所在的路径)
  从Mozilla路径下删除xpti.dat和compreg.dat(这两个文件会在Mozilla下次重启时自动生成)
  也可以touch Mozilla/FireFox安装目录下一个名为.autoreg的文件
9.测试组件
  重新启动Mozilla或是FireFox
  打开测试页面****Test.html,点击"GO"按钮,就能看到预期的结果了

抱歉!评论已关闭.