компилировать с cl.exe unicode casting errors

сначала код компилируется и запускается с VS2010

но когда я компилирую с 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
nl ja de
Вы должны предоставить полную командную строку, которую используете. В противном случае трудно определить, к чему относится родной тип LPCTSTR .
добавлено автор IInspectable, источник
Вы уверены, что это код, который не удается скомпилировать? Сообщение об ошибке относится к параметру 1, но ufileName является параметром 5 в этом примере.
добавлено автор simonc, источник
@simonc Я добавил код
добавлено автор bit8bug, источник

1 ответы

Вы пытаетесь передать массив WCHAR в функцию, ожидающую LPCTSTR . Эта статья объясняет, что LPCTSTR является массивом TCHAR s и что TCHAR изменяется в размерах для Unicode и не-unicode-сборок.

Ваш код основан на sizeof (TCHAR) == sizeof (WCHAR) , поэтому вам нужно включить поддержку Unicode.

Я бы предположил, что ваша сборка из IDE позволяет использовать unicode, а сборка командной строки - нет. Вы можете включить поддержку Unicode, добавив в свою командную строку -DUNICODE -D_UNICODE .

4
добавлено
Для этого требуется two , -DUNICODE, а также -D_UNICODE. Первый для заголовков SDK, второй для tchar.h
добавлено автор Hans Passant, источник
Можете ли вы обновить свой вопрос, чтобы показать, как вы компилируете, а затем связать свой код с помощью cl.exe, пожалуйста?
добавлено автор simonc, источник
Спасибо, я обновил свой ответ
добавлено автор simonc, источник
все еще получая ту же ошибку
добавлено автор bit8bug, источник