2016-03-16 3 views
1

Я использую (не будучи вполне уверен, lpBuffer -> char.ptr)Использование js-ctypes, как получить результат из Windows ReadFile?

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**)

ответ

1

Это сделало работу

let outputType = ctypes.char.array(1024); 
    let output = outputType(); 
    let isRead = readFile(hFile, output, 1024, bytesWritten.address(), null); 

 Смежные вопросы

  • Нет связанных вопросов^_^