OEMToCharW返回错误的字符

时间:2012-06-13 07:18:58

标签: windows delphi unicode command-line delphi-7

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

1 个答案:

答案 0 :(得分:3)

正如你所说,CMD有OEM字符集,这意味着pBuffer应该声明为

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

现在再试一次(现在不能自己检查)。

在Delphi 7中发现OemToCharW的声明是不正确的。在Delphi 7中,第一个参数在PWideChar时被错误地声明为PAnsiChar。您应该在代码中正确重新声明OemToCharW,并可能考虑使用OemToCharBuffW代替。