visual studio c ++ UNICODE相关的故障排除循环

时间:2017-07-19 19:47:11

标签: c++ visual-studio unicode mfc

我继承了一个我无法构建的c ++ visual studio项目。问题是很多像“CreateEvent”这样的api调用都有char *输入,但是错误代码需要“LPCWSTR”。它实际上是数百行代码,或多或少有类似的抱怨。

寻求帮助,常见的解决方案似乎是我应该禁用Unicode字符集。但是,当我这样做时,我得到“为非Unicode字符集构建一个MFC项目已被弃用”错误。寻求帮助,常见的解决方案似乎是我应该启用Unicode字符集。

所以,如果我这样做,我就会被冲洗,如果不这样做,我就会被冲洗。什么是正确的举动?

2 个答案:

答案 0 :(得分:2)

CreateEvent本身只是一个宏#define',它是WinAPI synchapi.h

中实际声明的两个函数之一
#ifdef UNICODE
#define CreateEvent  CreateEventW
#else
#define CreateEvent  CreateEventA
#endif // !UNICODE

通常(至少在我以前使用的所有Windows项目中)都定义了这个UNICODE宏,所以实际上一个函数使用CreateEventW函数,它接受LPCWSTR(换句话说{{1}单词参数,应该是UTF-16字符串文字。 如果未在项目中定义,则使用const wchar_t*,它接受​​CreateEventA参数(实际上相当于LPCSTR),并将其视为ASCII字符串。

您的项目似乎已设置为仅支持ASCII字符串。并且......好吧,现在这已被弃用:)以前有一些特殊的附加组件可以为这种情况启用构建,称为MFC MBCS DLL Add-on。但是,我不是100%确定它仍然可用,这里是a question here at StackOverflow about that

如果您没有找到这样的插件或任何替代解决方案,那么我担心编译它的唯一方法是将项目移植到Unicode字符串。实际上,即使您找到了解决方法,如果您打算继续维护此项目,我建议您将此活动添加到您的待办事项中,因为此类解决方案可能随时都不存在。

无论如何,了解你的最终结果会很有趣。

答案 1 :(得分:0)

您似乎正在使用Microsoft Visual Studio 2013.此版本是在没有MBCS版本的MFC的情况下发布的。另一方面,Visual Studio 2015和2017附带MBCS版本的MFC。

如果您想使用MBCS构建项目,则需要下载并安装:

https://www.microsoft.com/en-us/download/details.aspx?id=40770

另一个选择是将整个项目转换为Unicode,但根据您的项目,这可能会有很多工作。