error C2664: 'CreateFileW' ...
-
Hallo,
bin gerade dabei mir ein Programm zu schreiben (d.h. woanders Code heraus kopieren), welches mit der Com-Schnittstelle kommunizieren soll. Scheitere aber schon am Anfang. Ich erhalte folgende Fehler:
1>c:\dokumente und einstellungen\user\eigene dateien\visual studio 2008\projects\projekt_com1\projekt_com1\hauptprog.cpp(128) : error C2664: 'CreateFileW': Konvertierung des Parameters 1 von 'char [10]' in 'LPCWSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.Der Quelltext:
...
HANDLE hCom;
static char comm[10]="COM2";...
hCom = CreateFile(comm,
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened w/exclusive-access
NULL, // no security attrs
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);...
Hat jemand eine Idee, wie ich den Fehler beheben kann?
Grüße und Danke im Voraus
datatom
-
Die einfachste Lösung: schalte in den Projekteinstellungen von Unicode auf MBCS um.
-
Ein char ist eben kein wchar_t!
Wie wäre es mit etwas Grundlagenstudium?
Du hast ein Unicode Projekt. Dann wollen die meisten API Funktionen eben auch Unicode Strings!Also T-Notation benutzen:
static TCHAR comm[10]=_T("COM2");
1. Warum static?
2. Warum gibt Du eine Länge an?Das genügt:
TCHAR comm[]=_T("COM2");
-
Habe den Zeichensatz des Projektes auf "Multi-Byte-Zeichensatz verwenden"
umgestellt. Bekomme nun folgenden Fehler:1>------ Erstellen gestartet: Projekt: Projekt_com1, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>Hauptprog.cpp
1>Manifest in Ressourcen wird kompiliert...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Verknüpfen...
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".
1>C:\Dokumente und Einstellungen\User\Eigene Dateien\Visual Studio 2008\Projects\Projekt_com1\Debug\Projekt_com1.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.Habe aber auch die andere Variante mit der T-Notation ausprobiert
...
TCHAR comm[]=_T("COM2");
...
hCom = CreateFile(comm,
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened w/exclusive-access
NULL, // no security attrs
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
...und erhalte folgenden Fehler (Unicode-Zeichensatz):
1>------ Erstellen gestartet: Projekt: Projekt_com1, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>Hauptprog.cpp
1>c:\dokumente und einstellungen\user\eigene dateien\visual studio 2008\projects\projekt_com1\projekt_com1\hauptprog.cpp(10) : error C3861: "_T": Bezeichner wurde nicht gefunden.
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\User\Eigene Dateien\Visual Studio 2008\Projects\Projekt_com1\Projekt_com1\Debug\BuildLog.htm" gespeichert.
1>Projekt_com1 - 1 Fehler, 0 Warnung(en)Wer hat eine Idee?
PS: Wie markiert man den Text, wie es Martin Richter getan hat?
-
Habe bei der Version T-Notation tchar.h eingefügt und der Fehler error C3861: "_T": Bezeichner wurde nicht gefunden. ist verschwunden.
Erhalte aber nun folgenden Fehler:
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".
1>C:\Dokumente und Einstellungen\User\Eigene Dateien\Visual Studio 2008\Projects\Projekt_com1\Debug\Projekt_com1.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.Wer hat eine Idee?
-
Du hast Deine Projket als Windows Programm erzeugt, aber Du hast ein Konsolen Programm als Sourcecode.
Linker Optionen ändern.
BTW: Du findest zu dieser fehlermeldung genug Artikel in diesem Forum.
-
datatom schrieb:
PS: Wie markiert man den Text, wie es Martin Richter getan hat?
Schließ deinen Code in [cpp] und [/cpp] ein (dazu kannst du den C/C++-Button unter den Smiley benutzen, oder es halt selber notieren).
-
Ich schätze mal, dass die Include-Dateien nicht für ein Windowsprogramm sind sondern für eine Konsolenanwendung, oder?
Das heißt auch, dass ich die Funktionen, die ich nicht für mein Hauptfenster brauche, in eine Konsolenanwendung stecke und sie dann aus dem Windowsprogramm meines Hauptfensters aufrufe, oder?
-
Das hat nix mit include-Dateien/Headern zu tun. Der Linker sucht eine Funktion WinMain (du hast beim Erstellen des Projekts Win32-Anwendung angegeben). Du hast nun aber vor, eine Konsolenanwendung zu schreiben und notierst stattdessen die Funktion main. Alles was du tun musst, ist das in den Projektsettings zu korrigieren.
-
Danke an alle. Werde das Gelernte jetzt mal anwenden:-)