gpt4 book ai didi

python - PyXPCOM 组件未在 XULRunner 中加载

转载 作者:太空宇宙 更新时间:2023-11-03 19:29:05 24 4
gpt4 key购买 nike

我计划创建需要与 Python 交互的基于 XULRunner 的应用程序。计划使用 PyXPCOM。目前,我正在自学如何使用 PyXPCOM 并浏览 Creating a Python XPCOM component 中的示例组件developmentmnet。但无法让它发挥作用。

我使用的是 Ubuntu 11.04,我的步骤是:

  1. 创建了一个应用程序目录,并将我的 XULRUnner 5.x 二进制发行版复制到其中的 xulrunner 子目录

  2. 按照 Building PyXPCOM 成功构建 PyXPCOM

  3. 按照 PyXPCOM 源 README.txt 文件中的安装说明进行操作,并将目录 obj/dist/bin 的全部内容复制到我的 中xulrunner 子目录,并在 xulrunner/chrome.manifest 文件中添加以下行:

    manifest components/pyxpcom.manifest
  4. 创建了 nsIPySimple.idl 文件并将其放置在我的应用程序 components 子目录中:

    #include "nsISupports.idl"
    [scriptable, uuid(2b324e9d-a322-44a7-bd6e-0d8c83d94883)]
    interface nsIPySimple : nsISupports {
    attribute string yourName;
    void write( );
    void change(in string aValue);
    };
  5. 通过在我的 components 子目录中执行以下命令创建 xpt 文件:

    [xul-sdk-path]/xpidl -m typelib -w -v -I [xul-sdk-path]/idl/ nsIPySimple.idl
  6. 在我的 components 子目录中创建了 nsIPySimple.py

    from xpcom import components, verbose

    class PySimple: #PythonTestComponent
    _com_interfaces_ = components.interfaces.nsIPySimple
    _reg_clsid_ = "{607ebc50-b8ba-11e0-81d9-001cc4c794e3}"
    _reg_contractid_ = "@mozilla.org/PySimple;1"

    def __init__(self):
    self.yourName = "a default name" # or mName ?

    def __del__(self):
    if verbose:
    print "PySimple: __del__ method called - object is destructing"

    def write(self):
    print self.yourName

    def change(self, newName):
    self.yourName = newName

    PYXPCOM_CLASSES = [
    PySimple,
    ]
  7. 通过在我的 chrome.manifest 文件中添加以下行来注册 python 代码:

    interfaces  components/nsIPySimple.xpt
    component {607ebc50-b8ba-11e0-81d9-001cc4c794e3} components/nsIPySimple.py
    contract @mozilla.org/PySimple;1 {607ebc50-b8ba-11e0-81d9-001cc4c794e3}
  8. 创建了 Javascript 函数来调用 Python 方法:

    function showMore() {
    try {
    testComp = Components.classes["@mozilla.org/PySimple;1"].name;
    alert(testComp);
    testComp = Components.classes["@mozilla.org/PySimple;1"].
    createInstance(Components.interfaces.nsIPySimple);

    testComp.write();
    }
    catch (anError) {
    alert(anError);
    }
    }

但是 Javascript 代码抛出以下异常:

[Exception... "Component returned failure code: 0x80570015 
(NS_ERROR_XPC_CI_RETURNED_FAILURE) [nsIJSCID.createInstance]"
nsresult: "0x80570015 (NS_ERROR_XPC_CI_RETURNED_FAILURE)"
location: "JS frame :: chrome://reader/content/main.js ::
showMore :: line 5" data: no]

知道发生了什么或者我做错了什么吗?

感谢您的帮助和澄清!

最佳答案

错误消息表明 createInstance() 调用导致错误。好消息:这意味着 createInstance() 之前的一切都成功了(PyXPCOM 正在工作并且组件已正确加载/注册)。 http://code.google.com/p/pythonext/source/browse/samples/pyshell/components/pyShell.py表明 _com_interfaces_ 需要是一个列表,所以也许这就是这里的问题。如果未正确指定支持的接口(interface),则创建实例失败是有道理的。

关于python - PyXPCOM 组件未在 XULRunner 中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6853595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com