Guten Tag, ich habe ein Programm in C, das die Daten einer Messung von
einem Messgerät über die 232 Schnittstellen an den Pc überträgt. Alles
funktioniert.
Jetzt wollte ich das Programm in c++ zu schreiben mit einer Gui in qt4.
Ich habe den Code fast übernommen, ich bekomme jedoch zwei
Fehlermeldungen.
Könnt ihr mir bitte mit diesen FEhlern weiterhelfen.
Vielen Dank schon mal.
Hier ist mein Programm:
Hier bekomme ich diese Fehlermeldung
[/c]
mywindow.cpp:93: error: cannot convert 'const char*' to 'const WCHAR*'
for argument '1' to 'void* CreateFileW(const WCHAR*, DWORD, DWORD,
_SECURITY_ATTRIBUTES*, DWORD, DWORD, void*)'
und heir auch
1
BuildCommDCB("9600,n,8,1",&dcb);
mywindow.cpp:96: error: cannot convert 'const char*' to 'const WCHAR*'
for argument '1' to 'BOOL BuildCommDCBW(const WCHAR*, _DCB*)'
C++ win32 Daten Übertragung[232] schrieb:> if (hPort == INVALID_HANDLE_VALUE)> GetCommState(hPort, &dcb);> BuildCommDCB("9600,n,8,1", &dcb);> SetCommState(hPort, &dcb);
Das ist Unfug. Wenn hPort ungültig ist, ist das Öffnen der Schnittstelle
fehlgeschlagen, und GetCommState kann gar nicht funktionieren.
Den eigentlichen Fehler hat Peter schon ganz gut eingegrenzt; allerdings
sollte es
_T("COM1")
heißen und nicht
T("COM1")
Bei BuildCommDCB handelt es sich um das gleiche Problem, die
Strinkonstante sollte in _T() eingeschlossen werden.
Sinnvoller aber ist, wie Peter bereits andeutete, auf Unicode zu
verzichten. Was eine Compiler/Projekteinstellung ist.
Peter schrieb:> hPort=CreateFile( T("COM1"),GENERIC_READ | GENERIC_WRITE, 0,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
Hi danke für die Antwort, ihc bekomme jedoch die gleiche Fehlermeldung
mywindow.cpp:93: error: 'T' was not declared in this scope
Was macht dieser T??? oder ist das ein Tippfehler?
mywindow.cpp:99: error: cannot convert 'const char*' to 'const WCHAR*'
for argument '1' to 'BOOL BuildCommDCBW(const WCHAR*, _DCB*)'
Ich habe es auch so versucht
hPort=CreateFile(("COM1"),GENERIC_READ | GENERIC_WRITE, 0,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); ich bekam trotzdem die
gleiche Fehlermeldung?
Was meinst du genau mit Unicodeproblem???
Grüße
Rufus t. Firefly schrieb:> Den eigentlichen Fehler hat Peter schon ganz gut eingegrenzt; allerdings> sollte es>> _T("COM1")
aso ok, vielen Dank für deine Antwort, ich habe aber noch ein paar
Fragen, wo muss ich _T deklarieren??? da der Compiler mir sagt, dass _T
nicht deklariert worden ist.
Grüße
_T ist bei MS in tchar.h definiert.
Wenn das Dein Compiler (welcher eigentlich?) nicht kennt, dann solltest
Du mehr Energie dafür aufwenden, Dein Projekt als ANSI-Code für
8-Bit-Zeichensätze zu übersetzen, und nicht als UNICODE-Code für
16-Bit-Zeichensätze.
Ich benutze diese Entwicklungsumgebung QTCreator und sie benutzt den g++
Compiler.
Rufus t. Firefly schrieb:> Du mehr Energie dafür aufwenden, Dein Projekt als ANSI-Code für> 8-Bit-Zeichensätze zu übersetzen, und nicht als UNICODE-Code für> 16-Bit-Zeichensätze.
Ich finde leider nicht, wo ich das einstellen kann
Hier gibt der Compiler keinen Fehler mehr.
klar hier ist alles was der Compiler sagt:
Makefile.Debug:103: warning: overriding commands for target
`debug/moc_mywindow.cpp'
Makefile.Debug:100: warning: ignoring old commands for target
`debug/moc_mywindow.cpp'
mingw32-make[1]: Leaving directory `C:/Dokumente und
Einstellungen/praktikant.KME065/Eigene Dateien/w'
debug/mywindow.o: In function `MyWindow':
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:62: undefined reference to
`_imp___Z13qFlagLocationPKc'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:62: undefined reference to
`_imp___Z13qFlagLocationPKc'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:62: undefined reference to
`_imp___ZN7QObject7connectEPKS_PKcS1_S3_N2Qt14ConnectionTypeE'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:63: undefined reference to
`_imp___Z13qFlagLocationPKc'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:63: undefined reference to
`_imp___Z13qFlagLocationPKc'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:63: undefined reference to
`_imp___ZN7QObject7connectEPKS_PKcS1_S3_N2Qt14ConnectionTypeE'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:62: undefined reference to
`_imp___Z13qFlagLocationPKc'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:62: undefined reference to
`_imp___Z13qFlagLocationPKc'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:62: undefined reference to
`_imp___ZN7QObject7connectEPKS_PKcS1_S3_N2Qt14ConnectionTypeE'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:63: undefined reference to
`_imp___Z13qFlagLocationPKc'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:63: undefined reference to
`_imp___Z13qFlagLocationPKc'
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:63: undefined reference to
`_imp___ZN7QObject7connectEPKS_PKcS1_S3_N2Qt14ConnectionTypeE'
debug/mywindow.o:C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:72: undefined reference to
`_imp___ZNK7QString7toAsciiEv'
debug/mywindow.o:C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:75: undefined reference to
`_imp___ZNK7QString7toAsciiEv'
debug/mywindow.o:C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/mywindow.cpp:78: undefined reference to
`_imp___ZNK7QString7toAsciiEv'
debug/mywindow.o: In function `~QByteArray':
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/../../../../Qt/2010.02.1/qt/include/QtCore/../../src/corelib/t
ools/qbytearray.h:382: undefined reference to `_imp___Z5qFreePv'
debug/mywindow.o:C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/../../../../Qt/2010.02.1/qt/include/QtCore/../../src/corelib/t
ools/qbytearray.h:417: undefined reference to
`_imp___ZN10QByteArray7reallocEi'
debug/mywindow.o: In function `QString':
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/../../../../Qt/2010.02.1/qt/include/QtCore/../../src/corelib/t
ools/qstring.h:413: undefined reference to
`_imp___ZN7QString16fromAscii_helperEPKci'
debug/mywindow.o: In function `~QString':
C:\Dokumente und Einstellungen\praktikant.KME065\Eigene
Dateien\w/../../../../Qt/2010.02.1/qt/include/QtCore/../../src/corelib/t
ools/qstring.h:869: undefined reference to
`_imp___ZN7QString4freeEPNS_4DataE'
debug/moc_mywindow.o:C:\Dokumente und
Einstellungen\praktikant.KME065\Eigene
Dateien\w/../../../../Qt/2010.02.1/qt/include/QtCore/../../src/corelib/t
ools/qscopedpointer.h:112: undefined reference to
`_imp___Z9qt_assertPKcS0_i'
debug/moc_mywindow.o:moc_mywindow.cpp:(.rdata$_ZTV8MyWindow[vtable for
MyWindow]+0x20): undefined reference to `QObject::eventFilter(QObject*,
QEvent*)'
debug/moc_mywindow.o:moc_mywindow.cpp:(.rdata$_ZTV8MyWindow[vtable for
MyWindow]+0x24): undefined reference to
`QObject::timerEvent(QTimerEvent*)'
debug/moc_mywindow.o:moc_mywindow.cpp:(.rdata$_ZTV8MyWindow[vtable for
MyWindow]+0x28): undefined reference to
`QObject::childEvent(QChildEvent*)'
debug/moc_mywindow.o:moc_mywindow.cpp:(.rdata$_ZTV8MyWindow[vtable for
MyWindow]+0x2c): undefined reference to `QObject::customEvent(QEvent*)'
debug/moc_mywindow.o:moc_mywindow.cpp:(.rdata$_ZTV8MyWindow[vtable for
MyWindow]+0x30): undefined reference to `QObject::connectNotify(char
const*)'
debug/moc_mywindow.o:moc_mywindow.cpp:(.rdata$_ZTV8MyWindow[vtable for
MyWindow]+0x34): undefined reference to `QObject::disconnectNotify(char
const*)'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\w.exe] Error 1
mingw32-make: Leaving directory `C:/Dokumente und
Einstellungen/praktikant.KME065/Eigene Dateien/w'
mingw32-make: *** [debug] Error 2
Beendet mit Rückgabewert 2.
Fehler beim Erstellen des Projekts w
Beim Ausführen des Build-Schritts 'Make'
ne das habe ich schon richtig gemacht, wenn ich die zwei Zeile
auskommentiere, dann funktioniert das Programm, ich kann dann die
Textdatei erzeugen und dort etwas schreiben.
Machs doch andersrum: Lass das CreateFile-Lowlevelgewurschtel weg, und
nimm eine Methode die viel besser zur QT passt:
http://qextserialport.sourceforge.net/
Mr. S schrieb:> Ich benutze diese Entwicklungsumgebung QTCreator und sie benutzt den g++> Compiler.>> Rufus t. Firefly schrieb:>> Du mehr Energie dafür aufwenden, Dein Projekt als ANSI-Code für>> 8-Bit-Zeichensätze zu übersetzen, und nicht als UNICODE-Code für>> 16-Bit-Zeichensätze.>> Ich finde leider nicht, wo ich das einstellen kann>>> Hier gibt der Compiler keinen Fehler mehr.>
Alle Win32 Funktionen, die Strings erwarten, gibts in zwei Versionen:
die mit W am Ende erwartet 16 Bit wchars, die mit A am Ende erwartet 8
Bit chars. In den includes wird entweder das eine oder das andere auf
die Funktion ohne Buchstabe dahinter #define'ed, je nachdem ob _UNICODE
definiert ist oder nicht.
Schreib also statt CreateFile CreateFileA, und Dein Unicode-Problem ist
erledigt.
Das kann man zwar auch so erledigen, aber irgendwie ist's Murks.
Umständlich zumindest, da man herausfinden muss, bei welchen
Win32-API-Funktionen das so gehandhabt wird, ganz so einfach "Alle Win32
Funktionen, die Strings erwarten" ist's nämlich nicht.
Wenn die Inkonsistenz noch nicht erfunden wäre, MS hätte ein Patent
drauf.
Es sollte dem Benutzer eines Entwicklungssystemes schon zuzumuten sein,
die Dokumentation zu lesen und herauszufinden, warum es bestimmte
Konstanten definiert und was man dagegen tun kann.
[quote]
Machs doch andersrum: Lass das CreateFile-Lowlevelgewurschtel weg, und
nimm eine Methode die viel besser zur QT passt:
http://qextserialport.sourceforge.net/
[/quote]
siehe auch:
http://fireforge.net/projects/qserialdevice/
(Version 0.2.0)
ABER! Am besten ist es, die SVN nehmen:
svn checkout svn://scm.fireforge.net/svnroot/qserialdevice