0

私は英国に拠点を置くソフトウェアハウスで働いています。最近 64 ビット Windows に移植したプログラムがあります。64 ビット版を構築すると同時に、Visual Studio 2003 から 2010 に切り替え、MFC のコードページ バージョン (mfc100.dll) を引き続き使用しました。

プログラムを完全にリリースした直後に、64 ビット Windows 7 を使用している日本のユーザーからバグ レポートを受け取りました。名前に日本語の文字が含まれているファイル (またはフォルダー名に日本語の文字が含まれているファイル) を対話的に開いた場合、プログラムが失敗し、「不適切な引数が見つかりました」というメッセージが表示されます。

ファイルを新しい名前で保存しようとすることも同様です。プログラムの Visual Studio 2003 バージョンは期待どおりに動作します。

このプログラムは、MFC クラスの CFileDialog を使用してユーザーにプロンプ​​トを表示し、Windows の CopyFile() 関数を使用してユーザー指定の場所との間でファイルをコピーします。

これを解決する方法の手がかりはありますか?

4

1 に答える 1

0

Unicode ではなく MBCS を使用する場合、システム ロケールが日本語に設定されている場合にのみ、日本語のパス/ファイル名が正しく処理されます。

システム ロケールが日本語に設定されていない場合、パス/ファイル名はコードページに変換され、ガベージが含まれます (多くの場合、????? の形式)。

ロケールを日本語に設定し、プログラムをテストします。期待どおりに動作する場合は、問題を解決したことになります。

考えられる解決策は、CFileDialog のみを Unicode に切り替えることです。CFileDialog クラス メソッドではなく、基礎となる Win32 API の Unicode バージョンを呼び出します。すべてのパス/ファイル名をユニコード (wchar_t*) として取得し、WideCharToMultibyte関数を使用して MBCS に変換します。

于 2012-04-17T08:16:01.690 に答える