1

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();

それは正常に動作しますが、関数を greaterunit_sizeとで呼び出すとunit_count、たとえばread_memory(0, my, 4, 10)Firefox がクラッシュします。

サイズが限られているためctypes.charですか、それとも別の理由でこの障害が発生するのでしょうか。この問題に関する助けをいただければ幸いです。

ありがとうございました。

4

1 に答える 1

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++ で独自のライブラリ (LibToConvert.dll) を作成しました。

于 2012-11-15T10:29:26.397 に答える