C ++: SIGSEGV для функции ToUnicode (windows) - PullRequest
0 голосов
/ 25 марта 2012

Во-первых, пожалуйста, прости мой плохой английский;)

Я хочу использовать функцию Windows ToUnicode (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646320(v=vs.85).aspx), чтобы преобразовать код виртуальной клавиши в кодировку Unicode с C ++.
Но каждый раз, когда я звонюэта функция, 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);

Iдаже попробовал функцию ToAscii, и я получаю ту же ошибку: SIGSEGV

Можете ли вы помочь мне? =)

1 Ответ

2 голосов
/ 25 марта 2012

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