为什么 #define UNICODE 在 windows 中没有效果

use*_*388 -1 c++ windows

我有以下代码:

#define UNICODE
// so strange??
GetModuleBaseName( hProcess, hMod, szProcessName,
                    sizeof(szProcessName)/sizeof(TCHAR) );
Run Code Online (Sandbox Code Playgroud)

但是编译器还是报这样的错误:

error C2664: “DWORD K32GetModuleBaseNameA(HANDLE,HMODULE,LPSTR,DWORD)”: ????? 3 ?“wchar_t [260]”???“LPSTR” [E:\source\mh-gui\build\src\mhgui.vcxproj]

这意味着cant convert param 3 from wchar_t[260] to LPSTR. 好像还在找A版的api?

ten*_*our 6

你必须把

#define UNICODE
#define _UNICODE
Run Code Online (Sandbox Code Playgroud)

#include <Windows.h>
Run Code Online (Sandbox Code Playgroud)

Windows 标头使用#ifdef UNICODE(et al),因此如果要进行区分,则#defines必须出现在#include.


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

  • 最好将这些定义添加到编译器选项中,以便在整个编译过程中设置它们。 (2认同)