2012-04-16 15 views
0

私は英国に拠点を置くソフトウェアハウスで働いています。私たちは、最近64ビットWindowsに移植したプログラムを持っています。 64ビット版を作成すると同時に、Visual Studio 2003から2010に切り替えて、MFC(mfc100.dll)のコードページ版を引き続き使用しました。MFCプログラムが、名前に日本語の文字を含むファイルを開くときにクラッシュする

64ビット版のWindows 7を使用している日本のユーザーからバグレポートが届きました。名前に日本語の文字が含まれているファイル(またはフォルダ名に日本語の文字が含まれているファイル)対話的に開くと、プログラムは次のメッセージで失敗します。 "不適切な引数が検出されました"

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

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

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

+0

あなたはUnicode版を使用していますか? – Flot2011

+0

いいえ。変換するのは長期的な意図ですが、プログラムはWindows 95の時点からの日付であり、かなり大きいです。 –

+0

Andrew、これまでに解決策を手に入れましたか? MBCSを使用している古いアプリでも同じことが起こっています –

答えて

0

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

システムロケールが日本語に設定されていない場合、パス/ファイル名はコードページに変換され、ごみが含まれます(通常は?????)。

ロケールを日本語に設定し、プログラムをテストします。 期待どおりに機能していれば、問題は解決しました。

可能なソリューションは、CFileDialogに対してのみUnicodeに切り替えることができます。 CFileDialogクラスのメソッドではなく、基礎となるWin32 APIのUnicodeバージョンを呼び出します。すべてのパス/ファイル名をunicode(wchar_t *)として取得し、WideCharToMultibyte機能を使用してMBCSに変換します。

+0

日本のユーザーのシステムロケールが日本語に設定されていて、英語のコンピュータで日本語名のファイルを読み書きしようとするとエラーメッセージが表示されます全く異なっている。 –

+0

ロケールが日本語に設定されている場合、** your compにこれらのメッセージが表示されますか? – Flot2011

+0

プログラムはMFC OnOpenDocument()メソッドを使用してファイルを読み取ります。おそらく、これをバイパスしてUnicodeパスを取得する必要があります。 –

関連する問題