Js-ctypes带有字符串返回的第三部分dll

时间:2015-06-09 17:24:48

标签: javascript firefox-addon jsctypes

我使用的是带有用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崩溃了。有谁知道如何解决这个问题?我这样做是为了调制插件。

2 个答案:

答案 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