首先,请原谅我糟糕的英语;)
我想使用Windows函数ToUnicode(http://msdn.microsoft.com/en-us/library/windows/desktop/ms646320(v=vs.85).aspx)将虚拟键码转换为带有C ++的unicode char 但每次我称之为该功能时,Windows7都会说“MyProcess funktioniert nicht mehr” - 我不知道英语的eqiuvalent,也许是“MyProcess不再工作了”?! - 我可以选择调试MyProcess或关闭。
但是我的gdb调试器显示我得到了一个SIGSEGV,它告诉我我认为存在数据访问冲突。
这是我使用的代码:
BYTE kbd[256];
GetKeyboardState(kbd);
UINT vk = 65; //vitual key represents 'a'
UINT sc = 30; //scan code represents 'a'
LPWSTR chars;
ToUnicode(vk,sc,kbd,chars,2,0);
我甚至尝试过ToAscii函数,我得到了同样的错误:SIGSEGV
你能帮帮我吗? =)答案 0 :(得分:2)
ToUnicode需要一个可以将转换结果写入的缓冲区。
你给它一个指向内存(随机)的单位指针 - 这就是segfault来自的地方,ToUnicode试图写入不属于你的进程的内存。
请参阅以下示例以正确使用此功能
//Just a snippet showing the initialization the buffer part
const int BUFFER_LENGTH = 2; //Length of the buffer
WCHAR chars[BUFFER_LENGTH];
ToUnicode(vk,sc,kbd,chars,BUFFER_LENGTH,0);