【发布时间】:2021-07-14 22:32:00
【问题描述】:
我正在尝试在 Visual Studio 2019 中使用 Windows API。问题是,当我尝试使用以下内容创建宽字符串时:L"Hello World!",我收到错误:' L': 未找到标识符
然后,我尝试使用TEXT() 函数,据我了解,它应该将字符串转换为宽字符串:
char test[1024]; /// contains some text
SetWindowText(DMG_LABEL, TEXT(test));
这里我得到这个错误:'Ltest': undeclared identifier
这适用于使用 MinGW 的 CodeBlocks,所以我不明白为什么它在 VS 中不起作用。 (在 C++ 中测试过,但我很确定在 C 中是一样的)。
我到底做错了什么?
编辑:感谢@anastaciu,我没有意识到我没有使用wchar_t
【问题讨论】:
-
也许使用
wchar_t。 -
如果您展示一个有人可以测试的 10 行程序,您的问题会更好。目前我们必须猜测你有什么错误。
-
注意:您误解了
TEXT。如果定义了UNICODE,它是一个在编译时将字符串文字转换为宽字符串文字(TEXT("string)"变为L"string")的宏。否则它什么也不做。它不能在运行时转换字符串。TEXT(test)将变为Ltext并可能导致奇怪的编译器错误。 -
winnt.h中定义的 TEXT 宏仅用于使用字符串文字,而非变量。要定义 unicode 字符串,请使用wchar_t而不是char或相关的 WinAPI typedefWCHAR。另一个建议是,您始终指定是否要使用 WinAPI 函数的 Ansi 或 Unicode 版本而不是宏,以防止由于配置错误而可能出现的错误。 -
@H-005 "这对使用 MinGW 的 CodeBlocks 有效" - 如果允许的话,CB/MinGW 就会出现严重问题。 “我不明白为什么它在 VS 中不起作用” - 因为它不应该起作用,原因已经说明(
TEXT()仅适用于文字,不适用于变量)。
标签: c++ c visual-studio winapi widechar