使用WriteConsoleOutputCharacter()编译时出现wchar_t*转LPCSTR类型错误求助
WriteConsoleOutputCharacter()编译时出现wchar_t*转LPCSTR类型错误求助
嘿,我刚好碰到过类似的问题,给你几个解决办法试试:
错误原因
你遇到的类型不匹配问题,本质是MinGW默认没有启用Unicode相关宏,导致WriteConsoleOutputCharacter被解析为ANSI版本的WriteConsoleOutputCharacterA——这个函数接受的是const char*(即LPCSTR)类型参数,但你传入的是wchar_t*,自然就触发了编译错误。
解决办法
1. 在代码中定义Unicode宏
在包含<Windows.h>之前,先定义UNICODE和_UNICODE宏,这样系统会自动选用宽字符版本的WriteConsoleOutputCharacterW(它接受const wchar_t*类型,也就是LPCWSTR,刚好匹配你的screen变量):
#define UNICODE #define _UNICODE #include <Windows.h>
2. 在编译命令中添加宏定义参数
如果不想修改代码,可以直接在编译选项里加入-DUNICODE -D_UNICODE,修改后的编译参数如下:
"-std=c++20", "-g", "-DUNICODE", "-D_UNICODE", "${workspaceFolder}/*.cpp", "-L", "${workspaceFolder}\\src\\lib", "-I", "${workspaceFolder}\\src\\include", "-l", "mingw32", "-l", "SDL2main", "-l", "SDL2", "-o", "main"
3. 显式调用宽字符版本函数
最直接的方式是跳过宏的自动选择,直接调用宽字符版本的WriteConsoleOutputCharacterW,这样不管有没有定义宏,都能匹配正确的参数类型:
WriteConsoleOutputCharacterW(hConsole, screen, nScreenWidth * nScreenHeight, { 0,0 }, &dwBytesWritten);
小提醒
另外你代码里的循环目前只把screen数组的最后一个字符设为\0,记得在循环内给数组的其他元素填充你想要输出的Unicode字符哦,不然控制台会输出一堆垃圾内容~
备注:内容来源于stack exchange,提问作者Jamba
相关产品推荐
相关产品推荐

