gpt4 book ai didi

c++ - 无法将 'const char*' 转换为 'LPCWSTR {aka const wchar_t*}'

转载 作者:太空狗 更新时间:2023-10-29 23:21:50 25 4
gpt4 key购买 nike

我的 C++ 代码中出现一个我无法完全理解的错误。精简的代码位在这里:

RS232Handle=OpenRS232("COM1", 9600);

HANDLE OpenRS232(const char* ComName, DWORD BaudRate)
{
ComHandle=CreateFile(ComName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
}

我收到以下错误:

error: cannot convert 'const char*' to 'LPCWSTR {aka const wchar_t*}' for argument '1' to 'void* CreateFileW(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE)'
ComHandle=CreateFile(ComName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

代码取自 VS code,我现在使用的是 Qt creator。

我该如何解决这个问题?谢谢!

最佳答案

Windows CreateFile函数实际上是一个扩展为以下之一的宏:

  • CreateFileA,它采用 const char*
  • 类型的文件路径
  • CreateFileW,它采用 const wchar_t* 类型的文件路径。

(对于 Windows API 中的大多数接受字符串的函数也是如此。)

你正在声明参数 const char* ComName,但显然编译时定义了 UNICODE,所以它调用了 W 版本功能。没有从 const wchar_t*const char* 的自动转换,因此出现错误。

您的选择是:

  1. 将函数参数更改为 UTF-16 (const wchar_t*) 字符串。
  2. 保留 char* 参数,但让您的函数使用类似于 MultiByteToWideChar 的函数将其显式转换为 UTF-16 字符串.
  3. 显式调用 CreateFileA 而不是 CreateFile
  4. 在不使用 UNICODE 的情况下编译您的程序,以便默认情况下宏扩展到 A 版本。
  5. 绑架一位著名的微软开发人员并强制他阅读UTF-8 Everywhere直到他同意让 Windows 完全支持 UTF-8 作为“ANSI”代码页,从而将各地的 Windows 开发人员从这种宽字符的东西中解放出来。

编辑:不知道是不是绑架了,Windows 10 1903终于加入了支持for UTF-8 as an ANSI code page .

关于c++ - 无法将 'const char*' 转换为 'LPCWSTR {aka const wchar_t*}',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40641572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com