Я обращаюсь к DLL из JavaScript, используя JSCTypes.Я должен получить данные, передав символьный буфер следующему 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 дает сбой при вызове функции приема в последующие моменты времени.Я пытался воспроизвести эту проблему с помощью общей библиотеки DLL, доступной на Windows.Это вызывает исключение, необработанное исключение: TypeError: ctypes.char.array (500) .адрес не является функцией
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)' вfile '' в строке 0, столбец 0
У меня нет доступа к любому из исходного кода DLL.У меня просто есть включаемый файл (.h) для DLL.Я Java-разработчик и не уверен, что смогу отлаживать без исходного кода. Любая помощь приветствуется!