【发布时间】:2023-03-30 14:38:01
【问题描述】:
我一直在尝试在扫描码和字符之间进行转换。这个系统以前工作过,但到目前为止,不知什么原因已经停止工作。
static mut SCANCODE_BUFFER: winapi::shared::minwindef::PBYTE = std::ptr::null_mut();
static mut layout: winapi::shared::minwindef::HKL = std::ptr::null_mut();
pub fn SCANCODE_TO_CHAR(scancode: u32) -> char {
unsafe {
let mut result = [0 as u16; 2];
if GetKeyboardState(SCANCODE_BUFFER) == winapi::shared::minwindef::FALSE {
return 0 as char;
}
let vk = MapVirtualKeyExA(scancode, 1, layout);
ToAsciiEx(vk, scancode, SCANCODE_BUFFER, result.as_mut_ptr(), 0, layout);
result[0] as u8 as char
}
}
pub fn initialize() {
unsafe {
SCANCODE_BUFFER = [0 as u8; 256].as_mut_ptr();
layout = GetKeyboardLayout(0);
}
}
我做了一些调试,似乎函数调用:
GetKeyboardState(SCANCODE_BUFFER)
导致程序以以下方式结束:
(exit code: 0xc0000005, STATUS_ACCESS_VIOLATION)
有人知道如何解决这个问题吗?
额外信息:
SCANCODE_BUFFER 绝对不是空指针。
【问题讨论】: