簡體   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