2009-08-23 60 views
53

我在Visual Studio 2008中如何關閉VC++項目中的Unicode?

它定義編譯器命令行(/D "_UNICODE" /D "UNICODE")上統一的符號的VC++項目,即使我沒有這個符號在該項目的預處理器部分開啓。

alt text http://i26.tinypic.com/14nz693.jpg

結果,我對編譯所有的Win32庫函數的Unicode版本,而不是在ANSI的。例如在WinBase.h中,有:

#ifdef UNICODE 
#define CreateFile CreateFileW 
#else 
#define CreateFile CreateFileA 
#endif // !UNICODE 

unicode在VC++項目中打開的位置,如何關閉它?

+5

現在的實際問題是:爲什麼 - 看在上帝的份上 - 你會永遠希望得到來自禁用UNICODE支持什麼?這是我第一次見到有人要求進入故障模式的幫助。 – IInspectable 2014-10-20 13:40:48

+1

如果您有遺留代碼支持?例如,我們有一堆使用char/TCHAR的庫,例如15年前。 – 2015-10-16 10:34:33

+0

@IInspectable:Unicode支持與將'char'移動到'wchar_t'不同,這是Window做「Unicode」的蹩腳方式。通過一些拙劣的UTF-16實現,可以在任何一天給我使用UTF-8。 – 2016-09-15 20:55:02

回答

84

您是否嘗試過:項目屬性 - 常規 - 項目默認值 - 字符集?

見答案在這個問題上的「使用多字節字符集」之間的區別「未設置」選項:About the "Character set" option in visual studio 2010

+1

非常感謝。這對我發現並且無法編譯的項目幫助很大。 – LogoS 2015-12-30 15:53:30

6

工程爆破性質 - >配置電學性能的研究 - >通用 - >字節字符集

19

布爾戈斯有正確的答案。只是爲了澄清,字符集應該改爲「未設置」。

-13

上述解決方案都不適用於我。 但

#include <Windows.h> 

工作正常。

3

在主文件的頂部使用#undef UNICODE

+1

沒有*「主文件」*這樣的東西。有編譯單位。在源代碼中明確定義預處理器符號將會錯過通過'/ FI'編譯器選項包含的那些文件。另外,如果不定義'_UNICODE',則定義'UNICODE'會在Windows API和CRT之間產生很好的不匹配。相當無用的答案,-1。 – IInspectable 2016-09-15 22:29:52

-2

您可以轉到項目屬性 - >配置屬性 - >常規 - >項目默認 ,並將「字符集」從「Unicode」更改爲「未設置」。

+0

任何原因,你停下來,複製一個6歲的答案,沒有提供任何有價值的東西?當然,沒有歸因於信息的來源。 – IInspectable 2016-09-15 22:27:17

0

無論出於何種原因,我注意到設置爲unicode的「所有配置」 實際上並不適用於所有配置。

圖片: Setting Configuragion In IDE

爲了證實這一點,我會打開.vcxproj並確認正確的標記 在所有4個地點。在這張照片中,我使用的是unicode。所以我要找的字符串 是「Unicode」。對於你來說,你可能希望它說「MultiByte」。

圖片: Confirming changes in configuration file