2012-12-28 68 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 –