2012-06-13 55 views
1

我從一個控制檯應用程序(CMD)像這樣讀取輸入緩衝區:OEMToCharW返回錯誤的字符

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

回答

3

正如你所說,CMD已經在OEM字符集,這意味着p緩衝器應被聲明爲

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

現在再試一次(現在不能檢查這一權利我)。

在Delphi 7中發現OemToCharW的聲明不正確。在Delphi 7中,第一個參數在應該是PAnsiChar時被錯誤地聲明爲PWideChar。您應該在代碼中正確重新聲明OemToCharW,並可能考慮使用OemToCharBuffW

+0

好想法!唯一的問題是oemtocharW在第一個參數中需要一個widechar數組。 :/ –

+3

有趣的是,'OemToCharW'被聲明爲函數OemToCharW(lpszSrc:PWideChar; lpszDst:PWideChar):BOOL; stdcall;'在D2007中,但作爲函數OemToCharW(lpszSrc:PAnsiChar; lpszDst:PWideChar):BOOL; stdcall;'在XE2中。所以D2007似乎是錯的。 –

+0

我忘了說我使用Delphi7。但這怎麼可能。 WindowsAPI應該是一樣的...我用UTF-8試過了,但沒有運氣。 –

相關問題