从另一个IDE(Qt Creator)设置MSVC编译器的字符集

3
我正在尝试使用Microsoft Visual C++ Compiler 10.0 (x86)在Qt Creator中编译旧代码,但是我遇到了经典的错误:
“无法将参数1从'char *'转换为'LPCWSTR'”
解决方案不应该修改代码(这是一个第三方SDK),而是需要进入Visual Studio通用设置并更改字符集为“Use Multi-byte character set”(如此处此处所述)。
然而,我没有使用Visual Studio IDE,并且没有该设置。因此,我需要知道该设置实际上在代码/编译方面做了什么。它是否设置了编译器标志或#定义某些内容?我如何在Qt Creator中实现相同的效果?
2个回答

9

我检查了一下Visual Studio,发现以下内容:

如果选项是使用Unicode字符集,你会看到这两个编译器选项:

/D "_UNICODE" /D "UNICODE"

然而,如果选择“使用多字节字符集”,您将会有如下结果:
/D "_MBCS"

因此,您需要更新命令行并从/D "_UNICODE" /D "UNICODE"更改为/D "_MBCS",或在某个地方定义一个_MBCS符号。


太酷了,谢谢。这个页面与你所说的一致。 http://msdn.microsoft.com/en-us/library/ey142t48(v=vs.80).aspx - oggmonster
3
看起来Qt会自动为您定义UNICODE,而且没有办法从项目中取消定义它。您可以将/D“_MBCS”添加到QMAKE_CXXFLAGS qmake变量中,但/D“UNICODE”和/D“_MBCS”最终被传递为参数给cl。要在Qt Creator中将Multi-Byte字符集设置为默认值,您需要编辑MSVC设置的qmake.conf文件,我的文件位于: C:\ QtSDK \ Desktop \ Qt \ 4.8.0 \ msvc2010 \ mkspecs \ win32-msvc2010 在defines行中,您需要删除UNICODE并添加_MBCS。这不是很好的解决方法,但是Qt Creator没有像Visual Studio那样提供UI选项来更改它。 - oggmonster
7
@oggmonster。我成功地移除了UNICODE定义,并通过在我的.pro文件中添加以下内容来添加_MBCS。 DEFINES -= UNICODE DEFINES += _MBCS - eatyourgreens

1

你的代码中必须有一些调用MFC函数,使用"LPTSTR"等, 旧的.h文件可能包括:StdAfx.h,只需编辑它:

#ifdef _MSC_VER

#define assert ASSERT
#define snprintf _snprintf

//remove UNICODE define
#ifdef UNICODE
#undef UNICODE
#endif

#include <afxwin.h>

#endif

如果没有Unicode定义,它将会顺利进行,
无需修改\msvc2010\mkspecs\win32-msvc2010\qmake.conf


1
在 .pro 文件中,添加 DEFINES *= _AFXDLL _MBCS。 - raidsan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接