繁体   English   中英

使Windows32 API 成员扩展为A,或在vs2019 中更改字符集(c++)

[英]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)。

如果在编译期间定义了UNICODECreateWindow扩展为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM