我正在使用 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()
使用上面的代码,我可以第一次正确接收数据,但 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:预期的类型指针,在第 0 行第 0 列的文件 '' 中得到 ctypes.char.array(640000)'
我无权访问任何 dll 的源代码。我只有 DLL 的包含文件(.h)。我是一名 Java 开发人员,不确定是否可以在没有源代码的情况下进行调试。感谢任何帮助!