2012-04-16 69 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 2012-04-16 16:55:33

+0

不是。我們打算長期轉換它,但程序的日期從Windows 95開始並且非常大。 – 2012-04-17 07:43:55

+0

安德魯,你有沒有得到這個解決方案?我看到的舊應用程序中仍然使用MBCS – 2014-05-21 08:38:52

回答

0

如果使用MBCS而不是Unicode,則只有在系統語言環境設置爲日語的情況下,才能正確處理日語路徑/文件名。

如果您的系統語言環境未設置爲日語,則路徑/文件名將被轉換爲您的代碼頁並且將包含垃圾(通常以?????的形式)。

將您的語言環境設置爲日語並測試您的程序。 如果它按預期工作,則可以解決問題。

然後,可能的解決方案是切換到僅用於CFileDialog的Unicode。調用底層Win32 API的Unicode版本而不是CFileDialog類方法。獲取所有路徑/文件名爲unicode(wchar_t *),然後使用WideCharToMultibyte函數將它們轉換爲MBCS。

+0

日本的用戶將其系統區域設置設置爲日語,並且在我的英語計算機上嘗試使用日語名稱讀取和寫入文件的錯誤消息是很不一樣。 – 2012-04-17 08:47:38

+0

當您的語言環境設置爲日語時,您是否在** your ** comp上獲取這些消息? – Flot2011 2012-04-17 09:08:13

+0

該程序使用MFC OnOpenDocument()方法讀取文件。據推測,我們需要繞過這個來獲得Unicode路徑。 – 2012-04-17 09:16:21