ne peut pas convertir le paramètre 1 de « char » à « LPCWSTR »
-
29-09-2019 - |
Question
Je continue à obtenir 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?
La solution
Il doit être
int main(int argc, char* argv[])
HANDLE h = CreateFileA(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
Autres conseils
Accédez aux propriétés de votre projet et sous Propriétés Configuration / Général, modifiez le jeu de caractères à « Non défini ». De cette façon, le compilateur ne pensera que vous voulez des caractères Unicode, qui sont sélectionnés par défaut:
Ceci est la fonction principale que Visual Studio crée par défaut:
int _tmain(int argc, _TCHAR* argv[])
Où _TCHAR est défini comme char ou wchar_t selon le cas _UNICODE est défini ou non. La même chose se produit avec les fonctions API. Je vous conseille de ne pas utiliser CreateFileA explicite. Changer votre CreateFile principal et de l'utilisation.
En fonction de réglage du compilateur pour CharacterSet , vous devrez peut-être effectuer une conversion multi-octets / widechar, ou changer le CharacterSet si vous ne faites pas ce qu'il est.
Pour la conversion avec MultiByteToWideChar, voir ce qui suit ...
Je suppose que vous compilez avec Unicode activé. Puis, avec char argv[]
, argv
est un tableau de char
, donc argv[1]
est un char
et CreateFile
veut un const wchar_t*
comme premier paramètre, pas char
.
Cela dit, la définition de votre main
est également brisée, il devrait avoir char* argv[]
. Avec ce changement, vous pouvez appeler CreateFileA
.