C ++:关于ToUnicode函数的SIGSEGV(windows)

时间:2012-03-24 22:26:43

标签: c++ winapi sigsegv

首先,请原谅我糟糕的英语;)

我想使用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

你能帮帮我吗? =)

1 个答案:

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