QextSerialPort Win Handle Problem

Alles rund um die Programmierung mit Qt
Antworten
topo
Beiträge: 24
Registriert: 3. Dezember 2009 16:58

QextSerialPort Win Handle Problem

Beitrag von topo »

Hallo Qt Nutzer,

ich bin gerade dabei QextSerialPort zu testen und habe hier ein Problem, bei dem ich Eure Hilfe sehr gut gebrauchen könnte.

Ich habe auf der QextSerialPort Projektwebsite das CSV Projekt ausgecheckt und wollte dies ohne Änderungen bauen. Ergebnis war ein erster Fehler, der aber relativ leicht zu umgehen war. Die Funktionen readData und writeData sind private, werden aber vom Beispiel verwendet.

Code: Alles auswählen

private:
	virtual qint64 readData(char *data, qint64 maxlen);
#ifdef _QESP_LOGTRACE_
	virtual qint64 readLineData(char *data, qint64 maxlen);
#endif
	virtual qint64 writeData(const char *data, qint64 len);
Also als schnellen Hack diese beiden Funktion public gemacht und schon baute alles. Hatte sonst noch jemand das Problem?

Nach starten der gerade gebauten ausführbaren Datei war ernüchternd:
WriteReadByteArrayTest
----------------------
[] QextSerialPort::Constructor(COM1)
[] QextSerialPort::setName(COM1)
+++ Created first
[] QextSerialPort::Constructor(COM2)
[] QextSerialPort::setName(COM2)
+++ Created second
[COM1] QextSerialPort::open
--- Could not open first
[COM2] QextSerialPort::Destructor
[COM2] QextSerialPort::close
[COM1] QextSerialPort::Destructor
[COM1] QextSerialPort::close

!!! Tests failed !!!
Also mit dem Debugger geschaut, wo das Problem liegen könnt und bei der open Funktion bin ich darauf gestossen:

Code: Alles auswählen

bool QextSerialPort::open( QIODevice::OpenMode )
{
QESP_LOGTRACE("open")

	if( ! isOpen() && ! Name.isEmpty() )
	{
#ifdef Q_WS_WIN
		Win_Handle = CreateFileA( Name.toAscii().constData(), GENERIC_READ|GENERIC_WRITE,
						0, NULL, OPEN_EXISTING, 0, NULL );
		if( Win_Handle != INVALID_HANDLE_VALUE )
		{
                                       ...
Als Win_Handle kommt bei mir 0xffffffff, also ein ungültiges Handle raus. Die Definition von Win_Handle ist "HANDLE Win_Handle" und genau hier komme ich nicht weiter. Kann mir jemand erklären was 'HANDLE' ist, wo es definiert ist und vielleicht warum dieses Beispiel bei mir nicht geht? Hatte jemand ähnliche Probleme?

COM1 und COM2 sind natürlich vorhanden :wink: !

Vielen Dank schon im Voraus für Eure Hilfe.

Viele Grüße,
topo
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

readData() und writeData() sind nicht ohne Grund private - siehe Doku zu QIODevice wie man richtig auf ein QIODevice zugreift.
Zu CreateFile -> Siehe msdn Doku http://msdn.microsoft.com/en-us/library ... S.85).aspx
Steht in Name auch was richtiges drin. Siehe http://msdn.microsoft.com/en-us/library ... namespaces
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten