Js-ctypes char readString()使Mozilla崩溃

时间:2012-08-10 10:03:11

标签: jsctypes

我正在使用js-sctypes从Firefox连接到Linux中的共享库。 我按照以下方式从库中声明了一个函数:

var read_memory = libc.declare("read_memory", ctypes.default_abi, ctypes.int,
                   ctypes.uint32_t, ctypes.char.ptr, ctypes.int, ctypes.int);

在C ++库中,此函数声明如下:

read_memory(unsigned int address, char *buf, int unit_size, int unit_count)

我通过以下方式调用read_memory函数:

var my = new ctypes.char().address();
read_memory(0, my, 4, 1);
st = st + my.readString();

它工作正常,但当我调用更大unit_sizeunit_count的函数时,例如read_memory(0, my, 4, 10),Firefox就会崩溃。

是因为ctypes.char的大小有限,还是因为这个错误还有其他原因? 任何有关此事的帮助将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:3)

我有同样的问题,问题是因为字符编码。在我的问题中,我需要将它们从windows-1250转换为utf-8。

我使用下面的代码:

result = myFunctionToInvoke();
var util = priv.Load("LibToConvert.dll");
var wi12502utf8 = util.declare("win12502utf8", ctypes.default_abi, ctypes.char.ptr, ctypes.char.ptr);
var val = wi12502utf8(result);
result = val.readString();

在这段代码中,我用C ++创建了自己的lib(LibToConvert.dll)来转换字符。