Js-ctypes 第三部分 dll with string return

Js-ctypes third part dll with string return

我正在使用用 C 编写的带有 js-ctypes 的 DLL。

方法return一个字符串,但是当我尝试访问指针的内容时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 崩溃了。任何人都知道如何解决这个问题?我这样做是为了调制插件。

尝试像这样将 str 转换为已知长度:var strCasted = ctypes.cast(str, ctypes.char.array(100).ptr); 然后尝试像这样读取字符串:var jsStr = strCasted.contents.readString(); 如果不跳转到 #jsctypes moz 频道,那应该可以解决问题我们'我们将讨论它,然后在此处更新解决方案。将此粘贴到您的 url 栏:irc://moznet/jsctypes

本铸造教程应该有所帮助:https://gist.github.com/Noitidart/081ef49002a90fe43005#comment-1470308

我找到问题了!谢谢诺伊达特。在第二个示例中,我在 str.readString() 之前关闭了库。它使 Firefox 崩溃。我试图减少问题post上的代码,忘记了这个细节,对不起。