2010-10-13 9 views
24

ich diesen Fehler erhalte: cannot convert parameter 1 from 'char' to 'LPCWSTR'kann nicht Parameters 1 von 'char' auf 'LPCWSTR' konvertieren

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"); 

kann jemand helfen?

Antwort

6

Es sollte aktiviert

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

Und

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

Ich weiß nicht, was die ANSI-Version von Createfile verwendet, ist der richtige Weg, nächste, was Sie wissen, zu gehen, und er wird anfangen Ändern aller Funktionsaufrufe, um die ANSI-Version zu verwenden. –

+1

@Nikola: Natürlich ist es der falsche Weg! Ich denke nur, dass es nicht angemessen ist, den Unterschied zwischen char, wchat_t, TCHAR zu erklären und wie korrekte Unicode-Anwendungen auf einen absoluten Anfänger zu schreiben. – ybungalobill

0

Ich denke, Sie kompilieren mit Unicode sein. Dann mit char argv[] ist argvchar ein Array, so ist ein argv[1]char und CreateFile will ein const wchar_t* als ersten Parameter, keine char.

Das heißt, Ihre main Definition ist auch gebrochen, sollte es char* argv[] haben. Mit dieser Änderung können Sie CreateFileA nennen.

102

Gehen Sie auf die Eigenschaften für Ihr Projekt und unter Konfiguration Eigenschaften/Allgemein, den Zeichensatz ändern „Nicht festgelegt“. Auf diese Weise wird der Compiler nicht davon ausgehen, dass Sie Unicode-Zeichen mögen, die standardmäßig aktiviert sind:

alt text

4

Dies ist die wichtigste Funktion, die Visual Studio standardmäßig erstellt:

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

Wo _TCHAR definiert ist char oder wchar_t abhängig sein, wenn _UNICODE definiert ist oder nicht. Das Gleiche passiert mit API-Funktionen. Ich würde Sie davon abraten, explizit CreateFileA zu verwenden. Ändern Sie Ihre Hauptdatei und verwenden Sie CreateFile.

1

Abhängig von Ihrer Compilereinstellung für CharacterSet müssen Sie möglicherweise eine Multibyte/Widehar-Konvertierung durchführen oder das CharacterSet ändern, wenn es Ihnen egal ist, was es ist.

Für mit MultiByteToWideChar Umwandlung finden Sie in der folgenden ...

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

Verwandte Themen