C++:ToUnicode函数(windows)上的SIGSEGV

C++: SIGSEGV on ToUnicode function (windows)

本文关键字:上的 SIGSEGV windows ToUnicode 函数 C++      更新时间:2023-10-16

首先,请原谅我英语不好;)

我想使用窗口函数ToUnicode(http://msdn.microsoft.com/en-us/library/windows/desktop/ms646320(v=vs.85).aspx)使用C++将虚拟密钥代码转换为unicode字符
但每次我调用该函数时,Windows7都会说"MyProcess funktioniert nicht mehr"-我不知道英文的等价物,也许是"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

你能帮帮我吗

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