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"按钮,就能看到预期的结果了