我从控制台应用程序(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 charset。之前我使用过OEMtoCharA,它工作正常。 我做错了什么?
感谢您的帮助。
编辑: 我使用Delphi7
答案 0 :(得分:3)
正如你所说,CMD有OEM字符集,这意味着pBuffer应该声明为
pBuffer: array[0..2400] of AnsiChar;
现在再试一次(现在不能自己检查)。
在Delphi 7中发现OemToCharW
的声明是不正确的。在Delphi 7中,第一个参数在PWideChar
时被错误地声明为PAnsiChar
。您应该在代码中正确重新声明OemToCharW
,并可能考虑使用OemToCharBuffW
代替。