使用js-ctypes,我如何从Windows ReadFile检索输出? [英] Using js-ctypes, how do I retrieve output from Windows ReadFile?

查看:197
本文介绍了使用js-ctypes,我如何从Windows ReadFile检索输出?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用(虽然对lpBuffer - > char.ptr不太确定)
$ b $ pre $ 让readFile = kernel32。 declare(
ReadFile,
ctypes.winapi_abi,
ctypes.int32_t,// bool //返回类型:1表示成功,0失败
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
);

for

  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]消息:TypeError:无法将ctypes.char.array(1024)
传递给参数2的int32_t ReadFile(void *,char *,uint32_t,void **)

更多尝试。

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



< blockquote>

JPM [error]消息:TypeError:无法通过
ctypes.char.array(1024).ptr到int32_t的参数2 ReadFile(void *,
char *,uint32_t,void **



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




JPM [error]消息:TypeError:output.address不是函数



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




JPM [error]消息:TypeError:无法将ctypes.char.ptr传递给
参数2 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);


I'm using (while not being quite sure about 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
  );

for

BOOL WINAPI ReadFile(
  _In_        HANDLE       hFile,
  _Out_       LPVOID       lpBuffer,
  _In_        DWORD        nNumberOfBytesToRead,
  _Out_opt_   LPDWORD      lpNumberOfBytesRead,
  _Inout_opt_ LPOVERLAPPED lpOverlapped
);

However, when I try

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

I get

JPM [error] Message: TypeError: can't pass ctypes.char.array(1024) to argument 2 of int32_t ReadFile(void*, char*, uint32_t, void**)

More attempts.

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

解决方案

This made it work

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

这篇关于使用js-ctypes,我如何从Windows ReadFile检索输出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆