我在我的 C++ 代码中遇到一个我无法理解的错误.精简后的代码位在这里:
I'm getting an error in my C++ code that I can't quite make sense of. The stripped down code bits are here:
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 代码,我现在使用 Qt creator.
The code was taken from VS code and I am now using Qt creator.
我该如何解决这个问题?谢谢!
How can I fix this issue? Thanks!
Windows CreateFile 函数实际上是一个扩展为以下之一的宏:
The Windows CreateFile function is actually a macro that expands to one of:
CreateFileA,它采用 const char*CreateFileW,它采用 const wchar_t* 类型的文件路径.CreateFileA, which takes a file path of type const char*CreateFileW, which takes a file path of type const wchar_t*.(Windows API 中大多数采用字符串的函数也是如此.)
(The same is true for most of the functions in the Windows API that take a string.)
您声明了参数 const char* ComName,但显然编译时定义了 UNICODE,因此它调用了 W 版本的功能.没有从 const wchar_t* 到 const char* 的自动转换,因此出现错误.
You're declaring the parameter const char* ComName, but apparently compiling with UNICODE defined, so it's calling the W version of the function. There's no automatic conversion from const wchar_t* to const char*, hence the error.
您的选择是:
const wchar_t*) 字符串.char* 参数,但让您的函数使用 MultiByteToWideChar.CreateFileA 而不是 CreateFile.UNICODE 的情况下编译您的程序,以便宏默认扩展为 A 版本.const wchar_t*) string.char* parameter, but have your function explicitly convert it to a UTF-16 string with a function like MultiByteToWideChar.CreateFileA instead of CreateFile.UNICODE, so that the macros expand to the A versions by default.我不知道是否涉及绑架,但 Windows 10 1903 终于添加了支持 对于 UTF-8 作为 ANSI 代码页.
I don't know if a kidnapping was involved, but Windows 10 1903 finally added support for UTF-8 as an ANSI code page.
这篇关于无法将“const char*"转换为“LPCWSTR {aka const wchar_t*}"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
如何在 C++ 中读取和操作 CSV 文件数据?How can I read and manipulate CSV file data in C++?(如何在 C++ 中读取和操作 CSV 文件数据?)
在 C++ 中,为什么我不能像这样编写 for() 循环:In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,为什么我不能像这样编写 for() 循环: for(
OpenMP 如何处理嵌套循环?How does OpenMP handle nested loops?(OpenMP 如何处理嵌套循环?)
在循环 C++ 中重用线程Reusing thread in loop c++(在循环 C++ 中重用线程)
需要精确的线程睡眠.最大 1ms 误差Precise thread sleep needed. Max 1ms error(需要精确的线程睡眠.最大 1ms 误差)
是否需要“do {...} while ()"?环形?Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?环形?)