JSCTypes を使用して JavaScript から DLL にアクセスしています。次の API に文字バッファーを渡してデータを受信する必要がありますが、
__declspec(dllexport) WORD WINAPI receive( LPWORD lpwBufferSize,
LPSTR lpsBuffer);
私のjsctypesは次のようになります。
let receive = libs.dll.declare("receive",
ctypes.stdcall_abi,
ctypes.int32_t, // Return type - return code
ctypes.int32_t.ptr, // buffer size
ctypes.char.ptr, // Buffer
);
var bufferSize = new ctypes.int32_t(3000000).address(); //3000000
var buffer = new ctypes.char().address();
let rvopen = receive(bufferSize, buffer);
return buffer.readString()
上記のコードで、最初は正しくデータを受信できましたが、2 回目以降の受信関数呼び出しで xulrunner がクラッシュします。Windowsで利用可能な一般的なDLLを使用して、この問題を再現しようとしました。これにより、キャッチされない例外がスローされます: TypeError: ctypes.char.array(500).address is not a function
var hostName = exports.getString = function() {
let lib = ctypes.open('Ws2_32.dll');
let gethostname = lib.declare("gethostname",
ctypes.default_abi,
ctypes.int,
ctypes.char.ptr,
ctypes.int);
var myArray = ctypes.char.array(500).address();
gethostname(myArray, 500);
return myArray.readString();
};
アドレス API 呼び出しをドロップして、以下のように試してみると、
var myArray = ctypes.char.array(64);
C++ 配列はポインターと見なされますが、この問題に遭遇します。
「キャッチされていない例外: TypeError: 予想される型ポインター、ファイル内の ctypes.char.array(640000) を取得しました」行 0、列 0
dll のソース コードにアクセスできません。DLL のインクルード ファイル (.h) しかありません。私は Java 開発者ですが、ソース コードなしでデバッグできるかどうかわかりません。