не может преобразовать параметр 1 из 'char' в 'LPCWSTR' - PullRequest
28 голосов
/ 13 октября 2010

Я получаю эту ошибку: cannot convert parameter 1 from 'char' to 'LPCWSTR'

int main(int argc, char argv[])    
{

   // open port for I/O
   HANDLE h = CreateFile(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

   if(h == INVALID_HANDLE_VALUE) {
       PrintError("E012_Failed to open port");

Может кто-нибудь помочь?

Ответы [ 5 ]

112 голосов
/ 13 октября 2010

Перейдите в Свойства вашего проекта и в разделе Свойства конфигурации / Общие измените набор символов на «Не указан».Таким образом, компилятор не будет предполагать, что вам нужны символы Юникода, которые выбраны по умолчанию:

alt text

6 голосов
/ 13 октября 2010

должно быть

int main(int argc, char* argv[]) 

И

HANDLE h = CreateFileA(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
5 голосов
/ 13 октября 2010

Это основная функция, которую Visual Studio создает по умолчанию:

int _tmain(int argc, _TCHAR* argv[])

Где _TCHAR определяется как char или wchar_t в зависимости от того, определен _UNICODE или нет. То же самое происходит с функциями API. Я бы посоветовал вам не использовать явный CreateFileA. Измените свой основной и используйте CreateFile.

2 голосов
/ 13 октября 2010

В зависимости от настроек компилятора для CharacterSet вам может потребоваться выполнить многобайтовое / широкоформатное преобразование или изменить набор символов, если вам все равно, что это такое.с MultiByteToWideChar, см. следующее ...

http://www.codeguru.com/forum/showthread.php?t=231165

0 голосов
/ 13 октября 2010

Я полагаю, вы компилируете с включенным Юникодом.Затем с char argv[], argv является массивом char, поэтому argv[1] является char, а CreateFile хочет const wchar_t* в качестве первого параметра, а не char.

* 1010Тем не менее, ваше main определение также нарушено, оно должно иметь char* argv[].С этим изменением вы можете позвонить CreateFileA.
...