我使用的是带有用C语言生成的js-ctypes的DLL。
该方法返回一个字符串,但是当我尝试访问指针的内容时,firefox崩溃了!
以下代码有效:
功能声明:
var getStr = lib.declare("getString",
ctypes.default_abi,
ctypes.char.ptr,
ctypes.int32_t
);
函数调用:
let number = new ctypes.int32_t(1);
var str = getStr(number);
console.log(str.toString());
str.readString();
console.log
输出:
ctypes.char.ptr(ctypes.UInt64("0x64ff5b48"))
但此代码不起作用:
功能声明:
var Core = {
init : function(){
this.lib = ctypes.open("library");
this.getStr = this.lib.declare("getString",
ctypes.default_abi,
ctypes.char.ptr,
ctypes.int32_t);
},
close : function(){
this.lib.close();
}
}
函数调用
Core.init();
var number = new ctypes.int32_t(1);
var result = Core.getStr(number);
console.log(result.toString());
result.readString();
console.log
输出:
ctypes.char.ptr(ctypes.UInt64("0x64ff5b48"))
同样的事情!
用这种方式firefox崩溃了。有谁知道如何解决这个问题?我这样做是为了调制插件。
答案 0 :(得分:2)
我发现了问题!谢谢Noitidart。在第二个例子中,我在str.readString()
之前关闭了库。它使firefox崩溃。我试着减少问题帖子上的代码并忘记了这个细节,对不起。
答案 1 :(得分:0)
尝试将str
转换为已知长度,如下所示:var strCasted = ctypes.cast(str, ctypes.char.array(100).ptr);
然后尝试读取这样的字符串:var jsStr = strCasted.contents.readString();
如果不跳到#jsctypes moz频道就应该这样做我们'我将讨论它然后用解决方案更新回来。将其粘贴到您的网址栏:irc:// moznet / jsctypes
本演讲教程应该有所帮助:https://gist.github.com/Noitidart/081ef49002a90fe43005#comment-1470308