[英]Cannot use wide strings in C/C++ Visual Studio, even though it works in CodeBlocks using MinGW
我正在尝试在 Visual Studio 2019 中使用 Windows API。问题是当我尝试创建一个宽字符串时,使用如下内容: L"Hello World!"
,我得到一个错误: 'L':找不到标识符
然后,我尝试使用TEXT()
function,据我了解,它应该将字符串转换为宽字符串:
char test[1024]; /// contains some text
SetWindowText(DMG_LABEL, TEXT(test));
在这里我得到这个错误: 'Ltest':未声明的标识符
这适用于使用 MinGW 的 CodeBlocks,所以我不明白为什么它在 VS 中不起作用。 (在 C++ 中进行了测试,但我很确定在 C 中是一样的)。
我到底做错了什么?
编辑:感谢@anastaciu,我没有意识到我没有使用wchar_t
这在 Code::Blocks 中有效,因为 Code::Blocks 很烂。
Code::Blocks 仍然认为,在 2021 年,使用代码页编码是正确的默认设置。 结果, TEXT
宏扩展为空。
使用像 Visual Studio 这样的 IDE,默认使用 Unicode, TEXT
宏扩展为令牌粘贴序列,将L
拍到其参数,无论该参数是什么。 它旨在与字符串文字一起使用,在这种情况下,它可以满足人们的期望。 如果您将它与变量名一起使用,那么,它仍然会在它前面加上一个L
因此,编译器现在可以看到Ltest
而不是test
。 它要么使用名为Ltest
的符号,要么在找不到它时产生错误。
我到底做错了什么?
您正在使用类似函数的预处理器符号,该符号旨在与字符串文字一起使用,而不是字符串文字。
项目属性->高级->字符集=使用Unicode字符集
或在添加 <windows.h> 之前
#if !defined(_UNICODE)
#define _UNICODE
#endif
#if !defined(UNICODE)
#define UNICODE
#endif
#include <windows.h>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.