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;

もう一度やり直してください(今は自分で確認できません)。

OemToCharWDelphi 7ではの宣言が正しくないことが判明しました。Delphi7では、最初のパラメータが本来PWideCharあるべきときに誤って宣言されていますPAnsiCharOemToCharWコードで正しく再宣言し、OemToCharBuffW代わりに使用することを検討する必要があります。

于 2012-06-13T07:45:06.623 に答える