我正在使用(虽然不太确定 lpBuffer -> char.ptr)
let readFile = kernel32.declare(
"ReadFile",
ctypes.winapi_abi,
ctypes.int32_t, //bool // return type: 1 indicates success, 0 failure
ctypes.voidptr_t, // in: hObject
ctypes.char.ptr, // out: lpBuffer
ctypes.uint32_t, // in: lpNumberOfBytesRead
ctypes.uint32_t.ptr, // out: lpNumberOfBytesWritten
ctypes.voidptr_t.ptr // inout: lpOverlapped
);
对于
BOOL WINAPI ReadFile(
_In_ HANDLE hFile,
_Out_ LPVOID lpBuffer,
_In_ DWORD nNumberOfBytesToRead,
_Out_opt_ LPDWORD lpNumberOfBytesRead,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
但是,当我尝试
let output = ctypes.char.array(1024);
let isRead = readFile(hFile, output, 1024, bytesWritten.address())
我明白了
JPM [error] Message: TypeError: can't pass ctypes.char.array(1024) to argument 2 of int32_t ReadFile(void*, char*, uint32_t, void**)
更多尝试。
let output = ctypes.char.array(1024);
let isRead = readFile(hFile, output.ptr, 1024, bytesWritten.address())
JPM [error] Message: TypeError: can't pass ctypes.char.array(1024).ptr to argument 2 of int32_t ReadFile(void*, char*, uint32_t, void**
let output = ctypes.char.array(1024);
let isRead = readFile(hFile, output.address(), 1024, bytesWritten.address())
JPM [error] Message: TypeError: output.address is not a function
let output = ctypes.char.ptr;
let isRead = readFile(hFile, output, 1024, bytesWritten.address())
JPM [error] Message: TypeError: can't pass ctypes.char.ptr to argument 2 of int32_t ReadFile(void*, char*, uint32_t, v oid**)
最佳答案
这样就可以了
let outputType = ctypes.char.array(1024);
let output = outputType();
let isRead = readFile(hFile, output, 1024, bytesWritten.address(), null);
关于javascript - 使用 js-ctypes,如何从 Windows ReadFile 检索输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031573/