no se puede convertir parámetro 1 de 'Char' a 'LPCWSTR'
-
29-09-2019 - |
Pregunta
Quiero evitar este 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");
Alguien puede ayudar?
Solución
Debe ser
int main(int argc, char* argv[])
y
HANDLE h = CreateFileA(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
Otros consejos
Vaya a las propiedades de su proyecto y en Configuración de Propiedades / General, cambiar el juego de caracteres a "no ajustada". De esta manera, el compilador no asumirá que desea caracteres Unicode, que se seleccionan de forma predeterminada:
Esta es la función principal que Visual Studio crea por defecto:
int _tmain(int argc, _TCHAR* argv[])
donde se define _TCHAR ser CHAR o wchar_t dependiendo de si se define o no _UNICODE. Lo mismo ocurre con las funciones de la API. Te aconsejaría contra el uso de CreateFileA explícita. Cambiar su CreateFile principal y su uso.
En función de la configuración del compilador para de Caracteres , puede que tenga que realizar una conversión de varios bytes / widechar, o cambiar el Juego de Caracteres, si no le importa lo que es.
Para convertir con MultiByteToWideChar, consulte la siguiente ...
supongo que está compilando con Unicode. Luego, con char argv[]
, argv
es una matriz de char
, por lo argv[1]
es un char
, y CreateFile
quiere un const wchar_t*
como primer parámetro, no un char
.
Dicho esto, su definición main
se rompe también, debe tener char* argv[]
. Con este cambio, puede llamar CreateFileA
.