2009-08-23 57 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