使用cl.exe Unicode转换错误进行编译

bit*_*bug 1 c winapi visual-studio

首先,代码编译并与VS2010一起运行

但是当我用cl.exe编译时,它给出了

cannot convert parameter 1 from 'WCHAR [10]' to 'LPCTSTR'
Run Code Online (Sandbox Code Playgroud)

该代码是

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

postFile(ufileName, clientSock);
postFile(LPCTSTR lpFileName, SOCKET clientSock)
Run Code Online (Sandbox Code Playgroud)

sim*_*onc 5

您正在尝试将WCHAR数组传递给期望为的函数LPCTSTR本文说明了LPCTSTR是的数组,TCHAR并且TCHAR对于unicode和非unicode构建,其大小有所不同。

您的代码依赖,sizeof(TCHAR) == sizeof(WCHAR)因此需要启用unicode支持。

我猜想您在IDE中进行的构建会启用unicode,而您的命令行构建则不会。您可以通过添加-DUNICODE -D_UNICODE到命令行来启用unicode支持。

  • 它需要*两个*定义-DUNICODE和-D_UNICODE。第一个用于SDK标头,第二个用于tchar.h (2认同)