什么是Unicode和ANSI名称

时间:2017-03-28 06:19:14

标签: winapi visual-c++

附带屏幕截图中的Unicode和ANSI名称是什么。Image 在此链接MSDN Page

的页面末尾提到了它

1 个答案:

答案 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的值(可以是#defineLoadLibraryA取决于是否设置了LoadLibraryW)(#define UNICODE的值相同,可以是{{1} }或ShellExecute)。因此,在源代码中,您可以直接使用ShellExecuteAShellExecuteW和第三个版本LoadLibraryA,这取决于预处理器宏将使用其他两个中的一个。如果您想使用API​​的“不可知”LoadLibraryW版本,则应使用LoadLibraryLoadLibraryTCHARLPTSTR,通过预处理器,将更改为LPCTSTR_T("foo")charchar*const char*"foo"wchar_t,{{1 }}。

但请注意,在2017年(通常从Windows ME死机时)使用ANSI api 错误。您应该始终以UNICODE为目标(或定位不可知版本和wchar_t*