3

我想使用微软的Visual C++编译器10.0(86)编译遗留代码Qt C​​reator中,并且我得到了经典的错误:设置字符从另一个IDE(Qt Creator中)为MSVC编译器设置

cannot convert parameter 1 from 'char *' to 'LPCWSTR'

而不是编辑的代码(东西我不应该这样做,这是一个第三方SDK),解决的办法是去到Visual Studio一般设置和更改字符集

'Use Multi-byte character set'

(如描述herehere

但是,我没有使用Visual Studio IDE并且没有该设置。所以我需要知道在代码/编译方面实际做了什么设置。它是否设置了编译器标志或#define?我如何在Qt Creator中实现同样的功能?

回答

9

快速检查在Visual Studio,这是我发现:

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

/D "_UNICODE" /D "UNICODE" 

然而,如果是使用多字节字符集,你必须:

/D "_MBCS" 

因此,您需要更新命令行并从/D "_UNICODE" /D "UNICODE"更改为/D "_MBCS"或#define某处_MBCS符号。

+0

酷感谢,该页面在这里跟你说什么 证实http://msdn.microsoft.com /en-us/library/ey142t48(v=vs.80).aspx – oggmonster

+3

看来Qt自动定义了UNICODE for你,并且没有办法从你的项目中取消定义它。您可以将/ D“_MBCS”添加到QMAKE_CXXFLAGS qmake变量中,但/ D“UNICODE”和/ D“_MBCS”最终作为参数传递给cl。 要使多字节字符集成为Qt Creator中的默认字符集,您必须编辑您的MSVC设置的qmake.conf文件,我的位于: C:\ QtSDK \ Desktop \ Qt \ 4.8.0 \ msvc2010 \ mkspecs \ win32-msvc2010 在定义行上,您需要删除UNICODE并添加_MBCS。不是一个很好的解决方法,但Qt Creator不会给你一个像Visual Studio那样改变UI的选项。 – oggmonster

+5

@oggmonster。我能够删除UNICODE定义并添加_MBCS添加到我的.pro文件以下内容。 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 

那么它会经过无统一定义,
无需修改\ msvc2010 \ mkspecs \ Win32的msvc2010 \ qmake.conf

+1

在.pro文件中,添加DEFINES * = _AFXDLL _MBCS – raidsan