web-dev-qa-db-fra.com

ne peut pas convertir le paramètre 1 de 'char' en 'LPCWSTR'

Je continue à avoir cette erreur: 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");

quelqu'un peut-il aider?

27
sebastian

CA devrait etre

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

Et

HANDLE h = CreateFileA(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
6
ybungalobill

Accédez aux propriétés de votre projet et sous Propriétés de configuration/Général, modifiez le jeu de caractères en "Non défini". De cette façon, le compilateur ne supposera pas que vous vouliez des caractères Unicode, qui sont sélectionnés par défaut:

alt text

111
Michael Goldshteyn

C'est la fonction principale que Visual Studio crée par défaut:

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

Où _TCHAR est défini comme étant char ou wchar_t selon que _UNICODE est défini ou non. La même chose se passe avec les fonctions de l'API. Je vous déconseille d'utiliser explicitement CreateFileA. Changez votre main et utilisez CreateFile.

5
Nikola Smiljanić

Selon le paramétrage de votre compilateur pour CharacterSet, vous devrez peut-être effectuer une conversion multi-octets/widechar ou modifier le CharacterSet si vous ne vous en souciez pas.

Pour convertir avec MultiByteToWideChar, voir ce qui suit ...

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

2
Allbite

Je suppose que vous compilez avec Unicode activé. Alors avec char argv[], argv est un tableau char, donc argv[1] est un char, et CreateFile veut un const wchar_t* comme premier paramètre, pas un char.

Cela dit, votre définition main est également brisée, elle devrait avoir char* argv[]. Avec ce changement, vous pouvez appeler CreateFileA.

0
Johann Gerell