1

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

4

1 回答 1

3

如您所说, CMD 具有 OEM 字符集,这意味着 pBuffer 应声明为

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

现在再试一次(我自己现在无法检查)。

事实证明,在 Delphi 7 中的声明OemToCharW不正确。在 Delphi 7 中,第一个参数被错误地声明为PWideCharwhen it should be PAnsiChar。您应该OemToCharW在代码中正确重新声明,并可能考虑OemToCharBuffW改用。

于 2012-06-13T07:45:06.623 回答