我在英国的一家软件公司工作。我们有一个程序,我们最近移植到64位Windows。在我们构建64位版本的同时,我们也从Visual Studio 2003切换到2010,继续使用MFC的代码页版本(mfc100.dll)。
在我们完全发布该程序后不久,我们收到了日本用户使用64位Windows 7的错误报告。如果名称中包含日文字符的文件(或者文件夹名称中包含日文字符)以交互方式打开,程序失败并显示以下消息: “遇到了不正当的争论”
尝试使用新名称保存文件类似。 Visual Studio 2003版本的程序按预期工作。
该程序使用MFC类CFileDialog来提示用户和Windows CopyFile()函数将文件复制到用户指定的位置或从用户指定的位置复制文件。
有没有关于如何解决这个问题的线索?
答案 0 :(得分:0)
如果使用MBCS而不是Unicode,则只有在系统区域设置为日语时才能正确处理日语路径/文件名。
如果您的系统区域设置未设置为日语,则路径/文件名将转换为您的代码页并包含垃圾(通常以?????的形式)。
将您的语言区域设置为日语并测试您的程序。 如果按预期工作,则可以解决问题。
然后可能的解决方案是仅为CFileDialog切换到Unicode。调用基础Win32 API的Unicode版本而不是CFileDialog类方法。获取所有路径/文件名为unicode(wchar_t *),然后使用WideCharToMultibyte函数将它们转换为MBCS。