答案 0 :(得分:3)
旧窗口(pre-NT)使用ANSI代码页(每个字符1个字节,在世界的每个区域都不同)。从NT开始,Unicode被引入。在NT之前的所有API,其中ANSI(例如JavaScript
接受了ANSI名称作为库的名称。从NT开始,使用Unicode(LoadLibraryA(LPCSTR)
)引入所有API的新版本所以在Windows> = NT中有两个 API用于加载库,ANSI和Unicode。
然后还有第三个版本LoadLibraryW(LPCWSTR)
,它只是LoadLibrary
。此#define的值(可以是#define
或LoadLibraryA
取决于是否设置了LoadLibraryW
)(#define UNICODE
的值相同,可以是{{1} }或ShellExecute
)。因此,在源代码中,您可以直接使用ShellExecuteA
,ShellExecuteW
和第三个版本LoadLibraryA
,这取决于预处理器宏将使用其他两个中的一个。如果您想使用API的“不可知”LoadLibraryW
版本,则应使用LoadLibrary
,LoadLibrary
,TCHAR
,LPTSTR
,通过预处理器,将更改为LPCTSTR
,_T("foo")
,char
,char*
或const char*
,"foo"
,wchar_t
,{{1 }}。
但请注意,在2017年(通常从Windows ME死机时)使用ANSI api 错误。您应该始终以UNICODE为目标(或定位不可知版本和wchar_t*
)