gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:30:10 24 4
gpt4 key购买 nike

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

寻求帮助,常见的解决方案似乎是我应该禁用 Unicode 字符集。但是,当我这样做时,出现“不推荐为非 Unicode 字符集构建 MFC 项目”错误。寻求帮助,常见的解决方案似乎是我应该启用 Unicode 字符集。

因此,如果我这样做,我就会被淘汰,如果我不这样做,我就会被淘汰。正确的做法是什么?

最佳答案

CreateEvent本身不过是一个宏#define,它是实际上在 WinAPI 的 synchapi.h

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

通常(至少在我曾经使用过的所有 Windows 项目中)定义了这个 UNICODE 宏,所以实际上一个可以使用 CreateEventW 函数,它接受 LPCWSTR (换句话说 const wchar_t*), words 参数,它应该是一个 UTF-16 字符串文字。如果它没有在你的项目中定义,那么它使用 CreateEventA,它接受 LPCSTR 参数(实际上等同于 const char*),并将其视为 ASCII 字符串。

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

如果您没有找到这样的插件或类似的任何替代解决方案,那么恐怕让它编译的唯一方法就是将您的项目移植到 Unicode 字符串。实际上,即使您找到了解决方法,如果您打算进一步维护该项目,我建议您将此事件添加到待办事项列表中,因为这种解决方法可能随时不复存在。

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

关于c++ - visual studio c++ UNICODE 相关故障排除循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45199759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com