VC++ Schnittstellen RS232 Fehlermeldung

Hallo,

ich habe da ein Programm geschrieben, um auf meine Schnittstellen zuzugreifen. Aber ich kriege immer wieder eine Fehlermeldung:

.\demo.cpp(21) : error C2664: 'CreateFileW': Konvertierung des

Parameters 1 von 'const char [5]' in 'LPCWSTR' nicht möglich



Die Typen, auf die verwiesen wird, sind nicht verknüpft; die

Konvertierung erfordert einen reinterpret\_cast-Operator oder

eine Typumwandlung im C- oder Funktionsformat.

Ich weiss einfach nicht wieso er unbedingt dort eine Fehlermeldung schmeisst!
Im Quelltext ist es an dieser Stelle:

hCom = CreateFile ("COM1", GENERIC\_WRITE, 0, NULL, OPEN\_EXISTING, 0, NULL);

„COM1“ : das stört ihn irgendwie, aber es wurde so bei den Tutorials beschrieben, dass man es so schreiben soll.

Könnte es an einem fehlenden „include“ liegen? Hier für alle Fälle meine „includes“ :

#include
#include
#include
#include
#include
#include
#include „stdafx.h“

Bitte, ich würde mich über jede Hilfe freuen, wie ich dieses Problem lösen kann.

Wenn ihr weitere Infos oder Quelltext oder Jegliches braucht, einfach schreiben, ich versuch mein Bestes, um euch zu unterstützen.

Danke fürs Lesen
Gaan

Hallo Gaan,

anscheinend benutzt Du Unicode, also 16 bit Zeichen im string. Von daher musst Du „COM1“ (const char *) erst umwandeln in einen LPCWSTR.

ggf. mal MultiByteToWideChar oder so anschauen.

Gruß
achim

Howdy,

ggf. mal MultiByteToWideChar oder so anschauen.

nope, entweder Unicode abschalten (Projekteinstellungen) oder z.B. _T(„COM1“) schreiben, was bei Unicode nichts anders als L"COM1" ist.

Gruss
norsemanna

Hallo alle

Laut MSDN sieht ist das so:

LPCWSTR Pointer to a constant null-terminated Unicode character string.

Ich denke mal, oben gehört:

#define UNICODE

und dann:

CreateFile( TEXT("COM1"), ...);

Ich vermute das mal, kann man versuchen. Ein einfacher Cast

CreateFile( (LPCWSTR) "COM1", ...)

kann da auch schon Wunder wirken.

lG
Martin B

Howdy Martin,

CreateFile( (LPCWSTR) „COM1“, …)

kann da auch schon Wunder wirken.

(LPCWSTR) „COM1“ ist aber etwas anderes als _T(„COM1“) oder TEXT(„COM1“)… oder? :wink:

Gruss
norsemanna

Hallo norsemanna

(LPCWSTR) „COM1“ ist aber etwas anderes als _T(„COM1“) oder
TEXT(„COM1“)… oder? :wink:

Ja, OK. Ich schrieb ja, ich bin nicht sicher. Ich würde alle Varianten durchprobieren, irgendeine klappt dann schon, :_)

mfG
Martin B

Hossa :smile:

Das Macro TEXT(…) oder _T(…) setzt vor den Text ggf. ein L, wenn die entsprechenden Macros gesetzt sind, sprich wenn der Compiler so eingestellt ist, dass wchar verwendet wird. Dann erwarten natürlich auch alle Windows-Funktionen wchars als Eingabe.

hCom = CreateFile („COM1“, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

hCom = CreateFile ( L"COM1", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

Oder allgemeiner, wenn man sich nicht sicher ist, ob wchars aktiviert sind oder nicht:

hCom = CreateFile (_T(„COM1“), GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

Viele Grüße

Hase