我继承了一个我无法构建的c ++ visual studio项目。问题是很多像“CreateEvent”这样的api调用都有char *输入,但是错误代码需要“LPCWSTR”。它实际上是数百行代码,或多或少有类似的抱怨。
寻求帮助,常见的解决方案似乎是我应该禁用Unicode字符集。但是,当我这样做时,我得到“为非Unicode字符集构建一个MFC项目已被弃用”错误。寻求帮助,常见的解决方案似乎是我应该启用Unicode字符集。
所以,如果我这样做,我就会被冲洗,如果不这样做,我就会被冲洗。什么是正确的举动?
答案 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,但根据您的项目,这可能会有很多工作。