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