我正在学习C编程,并在此过程中尝试创建一个Windows GUI应用程序。我在MSDN文档中注意到新的应用程序应该使用UNICODE编码。考虑到这一点,我在编译器中添加了-DUNICODE标志。当调用函数CreateWindowEx()来创建窗口时,当我使用char*时标题变得很奇怪,编译器给我一个错误,说函数期待unsigned short*。如何将ANSI字符串转换为unsigned short?
UNICODE
-DUNICODE
CreateWindowEx()
char*
unsigned short*
w8ntj3qf1#
CreateWindowEx()是预处理器宏。当定义UNICODE时,它是CreateWindowExW()的别名,wchar_t* 1个字符串。如果没有定义UNICODE,则它是CreateWindowExA()的别名,接受char*字符串。
CreateWindowExW()
wchar_t*
CreateWindowExA()
// in winuser.h... #ifdef UNICODE #define CreateWindowEx CreateWindowExW #else #define CreateWindowEx CreateWindowExA #endif // !UNICODE
1在Visual Studio中,wchar_t在C中是unsigned short的别名,或者如果在C++中关闭了/Zc:wchar_t编译器选项。因此,您可以:
wchar_t
unsigned short
/Zc:wchar_t
L
L"..."
TEXT()
TEXT("...")
MultiByteToWideChar()
1条答案
按热度按时间w8ntj3qf1#
CreateWindowEx()
是预处理器宏。当定义UNICODE
时,它是CreateWindowExW()
的别名,wchar_t*
1个字符串。如果没有定义UNICODE
,则它是CreateWindowExA()
的别名,接受char*
字符串。1在Visual Studio中,
wchar_t
在C中是unsigned short
的别名,或者如果在C++中关闭了/Zc:wchar_t
编译器选项。因此,您可以:
UNICODE
并调用CreateWindowEx()
,或者直接调用CreateWindowExA()
,无论哪种方式都传入char*
字符串。CreateWindowExW()
(无论是直接调用,还是在启用UNICODE
的情况下调用CreateWindowEx()
),请在字符串前面加上特殊的L
前缀,使其成为wchar_t*
字符串,例如:L"..."
.当将字符串传递到CreateWindowEx()
宏时,您应该将它们 Package 在TEXT()
宏中,例如:TEXT("...")
,当定义UNICODE
时,将在它们前面加上L
前缀。MultiByteToWideChar()
(或等效)函数。