2012-12-28 70 views
0

第一代碼編譯與VS2010編譯cl.exe時的Unicode轉換錯誤

運行,但是當我編譯的cl.exe它給

cannot convert parameter 1 from 'WCHAR [10]' to 'LPCTSTR' 

代碼

char *fileName = "12.txt"; 
WCHAR ufileName[10]; 
MultiByteToWideChar(CP_ACP, MB_COMPOSITE, fileName, -1, ufileName, 10); 

postFile(ufileName, clientSock); 
postFile(LPCTSTR lpFileName, SOCKET clientSock) 
+0

你確定這是無法編譯的代碼嗎?錯誤信息引用參數1,但本例中'ufileName'是參數5。 – simonc

+0

@simonc我添加了代碼 – bit8bug

+0

您應該提供您正在使用的完整命令行。否則,很難說出什麼本地類型「LPCTSTR」映射到。 – IInspectable

回答

4

您試圖將WCHAR數組傳遞給期望LPCTSTR的函數。 This article解釋說LPCTSTRTCHAR的數組,並且TCHAR在unicode和非unicode構建的大小上有所不同。

您的代碼依賴於sizeof(TCHAR) == sizeof(WCHAR),因此您需要啓用unicode支持。

我猜你從IDE內部生成啓用unicode,而你的命令行編譯沒有。您可以通過將-DUNICODE -D_UNICODE添加到您的命令行來啓用Unicode支持。

+0

仍然收到相同的錯誤 – bit8bug

+0

你能否更新你的問題來展示你如何編譯,然後使用cl.exe鏈接你的代碼? – simonc

+2

它需要*兩個*定義,-DUNICODE以及-D_UNICODE。第一個是SDK頭文件,第二個是tchar.h –