2012-06-13 5 views
1

Я прочитал входной буфер из консольного приложения (CMD), как это:OEMToCharW возвращает неправильные символы

var 
pBuffer  : array [0..2400] of Widechar; 
dBuffer  : array [0..2400] of WideChar; 
CReadBuffer : Cardinal; 
BytesRead : Cardinal; 
begin 
// .... 
ReadFile(BuffHandle, pBuffer[0], CReadBuffer, BytesRead, nil); 
pBuffer[BytesRead] := #0; // Finish/End the WideString 
OemToCharW(pBuffer, dBuffer); 
MessageBoxW (0, dBuffer, '', 0); 
// .... 
end; 

По какой-то причине я получаю странные символы ... CMD должен иметь ОЙ кодировки. Раньше я использовал OEMtoCharA, и он работал нормально. Что я делаю неправильно?

Спасибо за помощь.

EDIT: Я использую Delphi7

ответ

3

Как вы сказали, CMD имеет набор символов OEM, что означает пиксельный буфер должен быть объявлен как

pBuffer: array[0..2400] of AnsiChar; 

Теперь попробуйте еще раз (не могу проверить это прямо сейчас себя).

В заявлении OemToCharW указано неверно в Delphi 7. В Delphi 7 первый параметр некорректно объявлен как PWideChar, когда он должен быть PAnsiChar. Вы должны правильно исправить OemToCharW в своем коде и, возможно, подумайте об использовании OemToCharBuffW.

+0

хорошо мысль! Единственная проблема заключается в том, что oemtocharW требует широкого массива в первом параметре. :/ –

+3

Смешно, 'OemToCharW' объявляется как функция OemToCharW (lpszSrc: PWideChar; lpszDst: PWideChar): BOOL; stdcall; 'в D2007, но как' function OemToCharW (lpszSrc: PAnsiChar; lpszDst: PWideChar): BOOL; stdcall; 'в XE2. Поэтому D2007 кажется неправильным. –

+0

Я забыл сказать, что я использую Delphi7. Но как это возможно. WindowsAPI должен быть одним и тем же ... Я пробовал его с UTF-8, но не повезло. –

Смежные вопросы