C++ Xpcom组件导致firefox崩溃

C++ Xpcom组件导致firefox崩溃,c++,xpcom,C++,Xpcom,我正在构建一个简单的XPCOM组件。但是每次我试图调用这个xpcom组件的方法时,firefox都会崩溃 文件层次结构如下所示: HelloXpcom.xpi ---chrome.manifest ---install.rdf ---chrome ------content ---------sample.xul ---components ------HelloXpcom.dll ------nsISample.xpt chrome.manifest代码段 content sampl

我正在构建一个简单的XPCOM组件。但是每次我试图调用这个xpcom组件的方法时,firefox都会崩溃

文件层次结构如下所示:

HelloXpcom.xpi
---chrome.manifest
---install.rdf
---chrome
------content
---------sample.xul
---components
------HelloXpcom.dll
------nsISample.xpt
chrome.manifest代码段

content     sample    chrome/content/
interfaces components/nsISample.xpt
binary-component components/HelloXpcom.dll

overlay chrome://browser/content/browser.xul chrome://sample/content/sample.xul
我的接口idl:

#include "nsISupports.idl"
[scriptable, uuid(F7F48977-382E-461B-B04A-44567EE6D45A)]
interface nsISample : nsISupports
{
    attribute string value;
    void writeValue(in string aPrefix);
    void poke(in string aValue);
};
使用xpidl.exe生成npISample.h和npISample.xpt。 而所有的实现方法几乎都是零,只是做一些简单的事情

sample.xul

<?xml version="1.0"?>
<overlay id="sample" 
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<statusbar id="status-bar">
<script>
function DoXPCOM()
{
    try {
        alert("1");
        var sample = Components.classes["@baofeng/sample;1"].createInstance();
        alert("2");
        sample = sample.QueryInterface(Components.interfaces.nsISample);
        alert("3");
        dump("sample = " + sample + "\n");
    }
    catch(err) {
        alert(err);
        return;
    }

    var res = sample.SetValue("123");
    var str = "";
    obj.GetValue(str);
    alert(str);
}
</script>
<button label="xpcom" oncommand="DoXPCOM();"/>
</statusbar>
</overlay>

函数DoXPCOM()
{
试一试{
警报(“1”);
var-sample=Components.classes[“@baofeng/sample;1”].createInstance();
警报(“2”);
sample=sample.QueryInterface(Components.interfaces.nsISample);
警报(“3”);
转储(“sample=“+sample+”\n”);
}
捕捉(错误){
警惕(err);
返回;
}
var res=样本设置值(“123”);
var str=“”;
对象获取值(str);
警报(str);
}
“警报(“1”);”
被执行,它在
组件上崩溃。class[“@baofeng/sample;1”].createInstance();“
联系人ID
”@baofeng/sample;1“
被firefox识别,如果没有,应该会弹出一些类似
“@baofeng/sample;1”
未定义的信息。因此,createInstance()方法就是重点。

有人能帮我解决这个问题吗?

此外,我正在windows7-x64-platform上使用xulrunner20和firefox20