VS 2013 中弃用 MBCS 对 MFC 的支持的副作用
Posted
技术标签:
【中文标题】VS 2013 中弃用 MBCS 对 MFC 的支持的副作用【英文标题】:Side-effect of deprecation of MBCS support for MFC in VS 2013 【发布时间】:2015-03-22 23:00:12 【问题描述】:我刚刚尝试在 VS2013 下编译一个旧的 MFC 应用程序。它抱怨非 Unicode MFC 应用程序已被弃用,并拒绝编译。这与this announcement 谈论不赞成对 MBCS 的支持有些相反。到目前为止,字符集选项共有三个选项:
Unicode MBCS 未设置就我个人而言,我对放弃对 MBCS 的支持完全满意 - 我既不想也不需要 MBCS。但我也不需要也不需要 Unicode - ANSI/ASCII 对我来说很好。因此,坚持从今以后每个 MFC 应用程序都必须使用 Unicode,并且(实际上)为平台提供支持所有可能语言的基础,无论其目标受众是谁,这似乎......极端。我错过了什么吗?在 VS2013 下是否还可以编译没有指定字符集的 MFC 应用程序?
【问题讨论】:
我认为另一个(更深远的)是是否支持 ANSI 字符串。 MBCS != ANSI,但 ANSI 字符是 1 字节宽,Unicode 是 2 字节宽。 嗯,Unicode 并不强制您为其他语言提供任何特定支持。但是,它确实可以防止尝试使用 ASCII 以外的任何内容的程序在配置为与程序预期不同的编码的系统上运行时受到 mojibake 的影响。 @franji1 - 刚刚编辑/更新了问题,以更好地反映我最初提出问题的意图。当您阅读最后一句话时,我认为它很清楚。 很难看出这个问题的重点。只有少数代码页实际上使用了包含超过一个字节的编码。它们涵盖东亚语言。 MFC 不在乎您不支持使用它们的用户,这完全是您的决定。它也不会阻止这样的用户,这取决于您。尽管这几乎是自动的,但他不会喜欢使用您的程序。 “未设置”选项仅在#defines 来自其他地方的项目中有用,例如 .h 文件。 【参考方案1】:你可以。目前我所有的程序都使用 Unicode 库。除了一个较旧的版本,它包含以前版本的非常旧的代码,并且需要此程序来支持此 od 版本的更新...
-
目前有一个Addon 仍然支持 MBC。
Vote 给它
据我了解讨论(参见 Mark Davis 2014 年 12 月的评论),这样的插件将可用,包括 VS2015(无论是什么版本)。
更准确地说,当您为字符集选择“无”时会发生什么:
-
您的程序链接到 MFC 的 MBCS 版本
Windows SDK 也将默认使用 API 的 MBCS 版本。所以即 GetWindowTextA 是调用而不是 GetWindowTextW
事实上。将 _UNICODE 和 _MBCS 设置为空,默认为 _MBCS...
SDQ 在内部总是检查是否设置了 UNICODE(不是 _UNICODE)。如果不是,则选择 MBCS 版本。
【讨论】:
这适用于我的问题 (MBCS) 列表中的选项 2。我对选项 3(未设置)感兴趣。这没有任何明显的亮点。 在我的答案中添加了文字,也可以回答这个问题。以上是关于VS 2013 中弃用 MBCS 对 MFC 的支持的副作用的主要内容,如果未能解决你的问题,请参考以下文章