我从控制台应用程序(CMD)读取输入缓冲区,如下所示:
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应该有OEM字符集。我以前用过Oemtochara,效果很好。
我做错什么了?
谢谢你的帮助。
编辑:
我用Delphi7
最佳答案
如您所说,CMD具有OEM字符集,这意味着PBuffer应该声明为
pBuffer: array[0..2400] of AnsiChar;
现在再试一次(我现在不能检查这个)。
在delphi 7中,
OemToCharW
的声明是不正确的。在Delphi7中,当第一个参数应该是PWideChar
时,它被错误地声明为PAnsiChar
。您应该在代码中正确地重新声明OemToCharW
,并可能考虑改用OemToCharBuffW
。