Win32控制台应用程序和MFC库在发布编译期间不兼容

时间:2015-01-10 14:26:12

标签: c++ winapi mfc

我有一个win32控制台应用程序,它使用一些MFC函数(Cobject,Cstring等),它使用以下配置在调试模式下编译和运行没有问题:

Configuration: Active(Debug) Platform: Active(Win32)
General->Use of MFC->Use MFC in a Static Library
C/C++->Code Generation->Runtime Library:Multi-threaded Debug DLL(/MDd)

但是,当我尝试使用以下配置编译发布模式(仍然是Win32平台)时,它开始出现问题:

Configuration: Active(**Release**) Platform: Active(Win32)
General->Use of MFC->Use MFC in a Static Library
C/C++->Code Generation->Runtime Library: **Multi-threaded (/MT)**

问题在于MFC' wchar_t *'之间的转换。到#char;'和字符串文字到' LPCTSTR'但是当我编译它为' Debug' !!!

时,这种问题不会发生

我知道我可以使用像_T宏这样的东西,但是有很多这些,这些在调试模式下显然有效,所以我真的希望它只是一些简单的标志,我在属性中更改为让它适用于发布'模式编译。帮助

1 个答案:

答案 0 :(得分:0)

@llnspectable和@Igor Tandetnik给出了我问题的正确答案。

在Visual Studio VC ++ 2008中,在调试模式下,对于Configuration Properties - >一般 - >项目默认值 - >字符集属性,它是使用多字节字符集'

但是,当我将编译模式更改为' Release'时,它会自动将该设置更改为“使用Unicode字符集”#39;。因此,在MFC字符串类和具有普通字符串的函数之间创建不兼容性,即char *

所以,在我改为'发布'模式,我确保字符集属性是使用多字节字符集。该项目成功编制。

另外,由于我在项目中有MFC类和功能,因此使用MFC'设置是在静态库中使用MFC'确保包含必要的库。