[英]Make Windows32 API members expand to A, or Change Character set in vs2019 (c++)
我的问题如下。 当我将字符串传递到 win32 api 的方法/类中时,我遇到了问题,即“const char*”类型不能用于分配 LPCWSTR 类型的变量。 我做了一个辅助方法,将 const char* 手动转换为 LPCWSTR。 在大多数情况下,这可以解决问题,但在 CreateWindow() 函数中,同样的错误仍然存在。 然后我在网上看了看,为了轻松避免这个问题,可以将字符集更改为UTF-8,但很快发现vs2019没有这个设置,它是2017年。我想知道的,基本上是在vs2019中有一种改变字符集的方法,或者一种方法来手动强制这些方法默认扩展到A类型而不是W(CreateWindow应该自动扩展到CreateWindowA,而不是扩展到CreateWindowW)。
如果在编译期间定义了UNICODE
则CreateWindow
扩展为CreateWindowW
,否则扩展为CreateWindowA
。 与TCHAR
(分别为wchar_t
/ char
)和所有其他基于W
/ A
的 API 相同。
因此,要么将项目的字符集设置为 ANSI/MBCS,要么您可以根据需要简单地使用#undef UNICODE
。 在 Windows 10 版本 1903(内部版本 18362)之前, A
API 根本不支持 UTF-8。 但从那时起,您可以选择通过应用程序清单启用 UTF-8 支持。
话虽如此,如果您的字符串数据开始时不使用TCHAR
,您不应该依赖基于TCHAR
的 API。
如果您专门使用char
数据,请直接使用A
API( CreateWindowA
等),除非您的数据是 UTF-8(或不同于用户的语言环境),在这种情况下,使用MultiByteToWideChar
或等效项将其转换为 UTF-16 和然后直接调用W
API。
如果您专门使用wchar_t
数据,请直接使用W
API( CreateWindowW
等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.