Hol*_*lli 6 windows winapi perl6 nativecall raku
我正在尝试将此代码移植到Perl6。虽然我可以打电话GetStdHandle,GetConsoleMode而且SetConsoleMode,我的脚本休息,当我试图调用ReadConsoleInput:
Cannot locate symbol 'ReadConsoleInput' in native library 'Kernel32.dll'
in method setup at C:\rakudo\share\perl6\sources\947BDAB9F96E0E5FCCB383124F923A6BF6F8D76B (NativeCall) line 287
in method CALL-ME at C:\rakudo\share\perl6\sources\947BDAB9F96E0E5FCCB383124F923A6BF6F8D76B (NativeCall) line 576
in block <unit> at test.p6 line 149
Run Code Online (Sandbox Code Playgroud)
现在,该函数肯定在那里。但是它有一个复杂的签名,我不确定我的脚本是否正确。那可能是原因吗?NativeCall是否查看签名?
这就是我在代码中定义子项的方式(注释摘自MS文档)
#BOOL WINAPI ReadConsoleInput( _In_ HANDLE hConsoleInput, _Out_ PINPUT_RECORD lpBuffer, _In_ DWORD nLength, _Out_ LPDWORD lpNumberOfEventsRead );
sub ReadConsoleInput(Pointer[void], INPUT_RECORD is rw, uint32, uint32 is rw) is native('Kernel32') returns Bool { * };
Run Code Online (Sandbox Code Playgroud)
如果需要,我可以发布其余的代码,但这是很多样板,因为我必须定义所有结构和内容,这些结构和内容通常来自头文件。
实际的函数名称是ReadConsoleInputA或ReadConsoleInputW,取决于您要输入ANSI还是Unicode(UTF-16)。C头具有ReadConsoleInput基于预处理程序符号自动转换为正确功能的宏。但是,当您像这样在运行时加载函数时,必须确切指定所需的函数。
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |