32

I keep getting this error: 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");

can someone help?

Joseph Stine
  • 1,022
  • 1
  • 12
  • 23
sebastian
  • 1,528
  • 8
  • 26
  • 38

5 Answers5

126

Go to the Properties for your Project and under Configuration Properties/General, change the Character Set to "Not Set". This way, the compiler will not assume that you want Unicode characters, which are selected by default:

alt text

Michael Goldshteyn
  • 71,784
  • 24
  • 131
  • 181
6

It should be

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

And

HANDLE h = CreateFileA(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
Yakov Galka
  • 70,775
  • 16
  • 139
  • 220
  • 4
    I don't thing using the ANSI version of CreateFile is the right way to go, next thing you know and he'll start changing all the function calls to use the ANSI version. – Nikola Smiljanić Oct 13 '10 at 15:00
  • 2
    @Nikola: Of course it's the wrong way! I just think that it's not appropriate to explain the difference between char, wchat_t, TCHAR and how to write correct unicode applications to an absolute beginner. – Yakov Galka Oct 13 '10 at 15:04
5

This is the main function that Visual Studio creates by default:

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

Where _TCHAR is defined to be char or wchar_t depending if _UNICODE is defined or not. The same thing happens with API functions. I would advise you against using explicit CreateFileA. Change your main and use CreateFile.

Nikola Smiljanić
  • 26,745
  • 6
  • 48
  • 60
2

Depending on your compiler setting for CharacterSet, you may need to perform a multibyte / widechar conversion, or change the CharacterSet if you don't care what it is.

For converting with MultiByteToWideChar, see the following...

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

Allbite
  • 2,367
  • 1
  • 24
  • 22
0

I guess you're compiling with Unicode enabled. Then with char argv[], argv is a char array, so argv[1] is a char, and CreateFile wants a const wchar_t* as first parameter, not a char.

That said, your main definition is also broken, it should have char* argv[]. With that change, you can call CreateFileA.

Johann Gerell
  • 24,991
  • 10
  • 72
  • 122