我从控制台应用程序(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

10-07 17:13