C++ 为什么#定义UNICODE在windows中无效

C++ 为什么#定义UNICODE在windows中无效,c++,windows,C++,Windows,我有以下代码: #define UNICODE // so strange?? GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) ); 但编译器仍报告如下错误: 错误C2664:“DWORD K32GetModuleBaseNameA(句柄,HMODULE,LPSTR,DWORD)”:无法将参数 3.从“wchar_t[260]”转换

我有以下代码:

#define UNICODE
// so strange??
GetModuleBaseName( hProcess, hMod, szProcessName,
                    sizeof(szProcessName)/sizeof(TCHAR) );
但编译器仍报告如下错误:

错误C2664:“DWORD K32GetModuleBaseNameA(句柄,HMODULE,LPSTR,DWORD)”:无法将参数 3.从“wchar_t[260]”转换为“LPSTR”[E:\source\mh gui\build\src\mhgui.vcxproj]

这意味着
无法将参数3从wchar_t[260]转换为LPSTR
。看起来还是在寻找版本api吗?

您必须将

#define UNICODE
#define _UNICODE
以前

#包括
Windows标头使用了
#ifdef UNICODE
(等),因此如果要进行区分计数,
#defines
必须出现在
#include
之前



编辑:因为这些定义在功能上是全局的,所以添加它们最可靠的地方是在编译器选项中,所以顺序并不重要。

因为您使用的是visual studio,与其自己定义UNICODE,不如在解决方案资源管理器->属性->高级->中右键单击项目来启用W版本,将“字符集”选项更改为“使用UNICODE字符集”

更好地将这些定义添加到编译器选项中,以便在编译过程中设置它们。如果使用PCH,这应该是编译器选项。我建议您直接使用W函数。在2020年,不使用unicode感知函数总是有点罪恶,明白了吗。非常感谢。
#include <Windows.h>