繁体   English   中英

无法在 C/C++ Visual Studio 中使用宽字符串,即使它可以在使用 MinGW 的 CodeBlocks 中使用

[英]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.

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