簡體   English   中英

使Windows32 API 成員擴展為A,或在vs2019 中更改字符集(c++)

[英]Make Windows32 API members expand to A, or Change Character set in vs2019 (c++)

我的問題如下。 當我將字符串傳遞到 win32 api 的方法/類中時,我遇到了問題,即“const char*”類型不能用於分配 LPCWSTR 類型的變量。 我做了一個輔助方法,將 const char* 手動轉換為 LPCWSTR。 在大多數情況下,這可以解決問題,但在 CreateWindow() 函數中,同樣的錯誤仍然存​​在。 然后我在網上看了看,為了輕松避免這個問題,可以將字符集更改為UTF-8,但很快發現vs2019沒有這個設置,它是2017年。我想知道的,基本上是在vs2019中有一種改變字符集的方法,或者一種方法來手動強制這些方法默認擴展到A類型而不是W(CreateWindow應該自動擴展到CreateWindowA,而不是擴展到CreateWindowW)。

如果在編譯期間定義了UNICODECreateWindow擴展為CreateWindowW ,否則擴展為CreateWindowA TCHAR (分別為wchar_t / char )和所有其他基於W / A的 API 相同。

因此,要么將項目的字符集設置為 ANSI/MBCS,要么您可以根據需要簡單地使用#undef UNICODE 在 Windows 10 版本 1903(內部版本 18362)之前, A API 根本不支持 UTF-8。 但從那時起,您可以選擇通過應用程序清單啟用 UTF-8 支持。

話雖如此,如果您的字符串數據開始時不使用TCHAR ,您不應該依賴基於TCHAR的 API。

如果您專門使用char數據,請直接使用A API( CreateWindowA等),除非您的數據是 UTF-8(或不同於用戶的語言環境),在這種情況下,使用MultiByteToWideChar或等效項將其轉換為 UTF-16 和然后直接調用W API。

如果您專門使用wchar_t數據,請直接使用W API( CreateWindowW等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM