用Visual Studio创建XPCOM组件

一、开发环境设置
下载 XULRunner和 XULRunner SDK,当前版本是1.8.1.3。可以在 http://releases.mozilla.org/pub/mozilla.org/xulrunner/releases/找到最新的版本。

解压到一个目录下,我的目录结构:
用Visual Studio创建XPCOM组件_第1张图片
这个SDK里还需要两个dll文件,下载 wintools.zip,从buildtools/windows/bin/x86里拷贝libIDL-0.6.dll、glib-1.2.dll到xulrunner/gecko-sdk/bin下。

二、XULRunner:Hello World!
在xulrunner创建tests目录,如下:
tests
|--application.ini
|--defaults
|   |--preferences
|   |   |--prefs.js
|--chrome
|   |--chrome.manifest
|   |--HelloWorld
|   |   |--test.xul

application.ini
[App]
Vendor=Duo
Name=tsetApp
Version=0.1
BuildID=20070530

[Gecko]
MinVersion=1.8
MaxVersion=1.8
prefs.js:
pref( " toolkit. defaultChromeURI " " chrome://tests/content/test.xul " );
chrome.manifest:
content tests HelloWorld /
test.xul:
<? xml version="1.0" ?>
<? xml-stylesheet href="chrome://global/skin/" type="text/css" ?>

< window  id ="controller-example"  title ="Hello World"
        xmlns
="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >

< label  value ="Hello World!" />

</ window >
在命令行下,进入xulrunner目录:
xulrunner.exe tests/application.ini

三、创建XPCOM组件
参考: How to build a binary XPCOM component using Visual Studio
VC++ Express Project: xpcom-test.zip
主要有6步:
  • 把"xulrunner/gecko-sdk/include"加到Additional Include Directories里
  • 把 "xulrunner/gecko-sdk/lib"加到Additional Library Directories里
  • 添加"nspr4.lib xpcom.lib xpcomglue_s.lib"库
  • 添加"XP_WIN;XP_WIN32″宏
  • 不使用]预编译头
  • 自定义XPCOM IDL编译步骤(右击*.idl文件,属性->自定义->命令行,输入$(ProjectDir)xpidl-build.bat $(InputFileName))
四、测试XPCOM组件
在上面建立的tests下创建components目录,把生成的.xpt、.dll文件拷贝到components。
修改test.xul文件:(注意,要保存为uft-8编码。)
<? xml version="1.0" ?>
<? xml-stylesheet href="chrome://global/skin/" type="text/css" ?>

< window  id ="controller-example"  title ="Controller Example"
        xmlns
="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >

< script >
function doXPCOM() {
    try {
        const cid = "@starkravingfinkle.org/specialthing;1";
        var obj = Components.classes[cid].createInstance();
        obj = obj.QueryInterface(Components.interfaces.ISpecialThing);
    }
    catch(err) {
        alert(err);
        return;
    }

    var res = obj.add(3, 4);
    alert('3+4 = ' + res);

    var name = obj.name;
    alert('Name = ' + name);

    obj.name = 'New Name';
    name = obj.name;
    alert('Name = ' + name);
}
</ script >

< button  id ="testXPCOM"  label ="测试XPCOM"  oncommand ="doXPCOM();" />

</ window >
修改application.ini的 BuildID,我改为20070601,运行这个程序就可以测试了。

你可能感兴趣的:(chrome,测试,express,vc++,library,Components)