2010-10-13 22 views
24

Continuo a ricevere questo errore: cannot convert parameter 1 from 'char' to 'LPCWSTR'non può convertire il parametro 1 da 'char' a '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"); 

qualcuno può aiutarmi?

risposta

6

Dovrebbe essere

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

E

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

Io non cosa utilizzando la versione ANSI di CreateFile è la strada giusta da percorrere, prossima cosa sapete e che sarà lui a iniziare cambiando tutte le chiamate di funzione per utilizzare la versione ANSI. –

+1

@Nikola: Certo che è nel modo sbagliato! Penso solo che non sia appropriato spiegare la differenza tra char, wchat_t, TCHAR e come scrivere applicazioni unicode corrette per un principiante assoluto. – ybungalobill

0

Credo che si sta compilando con Unicode abilitato. Poi con char argv[], argv è una matrice char, così argv[1] è un char e CreateFile vuole un const wchar_t* come primo parametro, non un char.

Detto questo, anche la definizioneè interrotta, dovrebbe avere char* argv[]. Con tale modifica, è possibile chiamare CreateFileA.

102

Passare alle Proprietà per il progetto e in Proprietà di configurazione/Generale, impostare il set di caratteri su "Non impostato". In questo modo, il compilatore non si assume che si desidera caratteri Unicode, che vengono selezionati per default:

alt text

4

Questa è la funzione principale che Visual Studio crea per impostazione predefinita:

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

Dove _TCHAR è definito come char o wchar_t a seconda che _UNICODE sia definito o meno. La stessa cosa succede con le funzioni API. Ti consiglierei di non utilizzare CreateFileA esplicito. Cambia il tuo principale e usa CreateFile.

1

A seconda dell'impostazione del compilatore per CharacterSet, potrebbe essere necessario eseguire una conversione multibyte/widechar o modificare il set di caratteri se non si cura di cosa si tratta.

Per la conversione con MultiByteToWideChar, vedere il seguente ...

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