2012-03-26 16 views
1

MFCプログラムがユニコード環境にあるので、以下のコードは正しく動作しません。作成方法:: WriteFileはUNICODE環境で動作しますか?

::WriteFile(hFile, TEXT("123456"), lstrlenW(TEXT("123456")), &dwByte, nullptr); 
::CloseHandle(hFile); 

結果が「123456」

私はUnicodeのBOMは、この問題を解決することができ、インターネット上で見つけることになっている「123」、です。 私は以下のようにコードを修正しました。

WORD Unicode = 0xfeff; // UNICODE BOM 
::WriteFile(hFile, &Unicode, 2, &dwByte, nullptr); 
::WriteFile(hFile, TEXT("123456"), lstrlenW(TEXT("123456")), &dwByte, nullptr); 
::CloseHandle(hFile); 

ただし、それは違いはありません。

シンプルな問題のようですが、解決策を探していなくなりました。

どんなアイデアも歓迎されます。前もって感謝します。

答えて

4

Writefile "text"は書き込まれません。 "Bytes"と書き込まれます。 lstrlenWwchar_tの数を返します。 あなたが「書くことバイトの数」第三のパラメータに与えるためにsizeof(wchar_t)を掛けSHOLD

+0

、ありがとうございました。ありがとう。 –

+0

'TEXT()'はUNICODEが定義されているかどうかによって 'char'または' wchar_t'で動作しますが、 'lstrlenW()'は 'wchar_t'だけで動作します。コードが両方の環境で動作するようにするには、 'writeFile(hFile、TEXT(" 123456 ")、lstrlen(TEXT(" 123456 "))*のように' lstrlen() 'と' sizeof(TCHAR) sizeof(TCHAR)、...) ' –

+0

@RemyLebeau - もう一度...いい人! –

2

lstrlenWを使用して書き込みデータ量を判断する必要はありません。WriteFileには、コードポイントの数ではなく、書き込むバイト数を指定する必要があります。今、あなたはそれを6としています。これは3文字分のバイトです。

+0

私はこれに感謝そんなに –

関連する問題