标准C将ANSI转换为UNICODE

mnemlml8  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(156)

我正在学习C编程,并在此过程中尝试创建一个Windows GUI应用程序。
我在MSDN文档中注意到新的应用程序应该使用UNICODE编码。考虑到这一点,我在编译器中添加了-DUNICODE标志。
当调用函数CreateWindowEx()来创建窗口时,当我使用char*时标题变得很奇怪,编译器给我一个错误,说函数期待unsigned short*
如何将ANSI字符串转换为unsigned short?

w8ntj3qf

w8ntj3qf1#

CreateWindowEx()是预处理器宏。当定义UNICODE时,它是CreateWindowExW()的别名,wchar_t* 1个字符串。如果没有定义UNICODE,则它是CreateWindowExA()的别名,接受char*字符串。

// 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编译器选项。
因此,您可以:

  • 关闭UNICODE并调用CreateWindowEx(),或者直接调用CreateWindowExA(),无论哪种方式都传入char*字符串。
  • 如果您要将字符串传递到CreateWindowExW()(无论是直接调用,还是在启用UNICODE的情况下调用CreateWindowEx()),请在字符串前面加上特殊的L前缀,使其成为wchar_t*字符串,例如:L"..." .当将字符串传递到CreateWindowEx()宏时,您应该将它们 Package 在TEXT()宏中,例如:TEXT("..."),当定义UNICODE时,将在它们前面加上L前缀。
  • 在运行时使用MultiByteToWideChar()(或等效)函数。

相关问题