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

如果您使用 MBCS 而不是 Unicode,则只有当您的系统区域设置为日语时,才会正确处理日语路径/文件名。

如果您的系统区域设置未设置为日语,则路径/文件名将被转换为您的代码页并包含垃圾(通常以????? 的形式)。

将您的语言环境设置为日语并测试您的程序。如果它按预期工作,那么您就解决了问题。

可能的解决方案是仅为 CFileDialog 切换到 Unicode。调用底层 Win32 API 的 Unicode 版本而不是 CFileDialog 类方法。将所有路径/文件名作为 unicode (wchar_t*) 获取,然后使用WideCharToMultibyte函数将它们转换为 MBCS。

于 2012-04-17T08:16:01.690 回答