gpt4 book ai didi

c++ - JavaScript 无法访问 XPCOM 对象方法

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:55 26 4
gpt4 key购买 nike

我正在尝试为 Firefox 构建一个扩展。此扩展使用 XPCOM 组件(C++ dll)。我正在编译DLL,编译正常。

我还成功地构建了一个 JS 代码,它实例化了来自 XPCOM 的对象:

try {
greenfox;
return true;
} catch( e ) {
alert( e );
return false;
}

返回的对象是这个:

QueryInterface
QueryInterface()

__proto__
[xpconnect wrapped native prototype] { QueryInterface=QueryInterface()}

QueryInterface
QueryInterface()

一切都很好,除了我无法调用应该在我的 XPCOM 组件中的函数。

这是我的 IDL 文件:

[scriptable, uuid(ec8030f7-c20a-464f-9b0e-13a3a9e97384)]
interface nsISample : nsISupports
{
attribute string value;
void writeValue(in string aPrefix);
void poke(in string aValue);

void start();
double stop();
};

调用 start() 函数时,出现 Javascript 错误:“不是函数”

greenfox.start();

你有什么想法吗?在我的 XPCOM 中似乎没有公开任何功能。

最佳答案

您似乎正在查看一个仅公开nsISupports 接口(interface)的对象。默认情况下,您的接口(interface) (nsISample) 不会公开,您必须明确请求它。例如,您可以像这样实例化您的组件:

var greenfox = Components.classes["..."].getService(Components.interfaces.nsISample);
greenfox.start();

或者,您也可以在已有的对象上调用QueryInterface:

greenfox.QueryInterface(Components.interfaces.nsISample);
greenfox.start();

一般来说,出于概述的原因,我不建议使用二进制 XPCOM 组件 here ,维护它们需要太多的努力。我宁愿建议编译一个常规 DLL 并通过 js-ctypes 使用它. Reference a binary-component to js-ctypes提到了如何在附加组件中找到 DLL 以通过 js-ctypes 使用它。

关于c++ - JavaScript 无法访问 XPCOM 对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9070233/

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