Serieller Port unter Windows 7
-
Hallo,
ich probiere einen Seriellen Port unter Windows 7 auszulesen. Ich bin schon den ganzen Tag damit beschäftigt das Internet zu durchwühlen, jedoch klappts immer noch nicht.
Wenn ich es richtig verstanden habe, muss man über CreateFile() den Port öffnen und kann ihn dann später wie eine Datei verwenden(also wie unter Linux, aber meine Schule hat ja Windows).
Mein Problem ist, dassich es bisher nicht schaffen, den COM Port auch nur zu öffnen(bekomme ein INVALID_HANDLE_VALUE zurück)! Mein Code sieht derzeit so aus:HANDLE hSerial; bool init_com() { WCHAR* portname = L"COM1"; hSerial = CreateFile(portname, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); if (hSerial == INVALID_HANDLE_VALUE) { return false; } else { return true; } }
Ich bin schon den ganzen Tag daran und weiß jetzt einfach nicht mehr weiter, hoffe ihr könnt(und wollt) mir helfen.
Mfg Daniel
-
Und was sagt GetLastError() ?
-
Wahrscheinlich sollte der Portname "\\\.\\COM1" geschrieben werden ...
-
Ist es normal, dass getLastError() nur eine zahl zurück gibt? Mir gibt sie einfach nur 2 zurück, vielleicht habe ich sie aber auch falsch verwendet?!
DWORD fehler = GetLastError(); cout << fehler << endl;
Und mit "\\\.\\COM3" funktioniert es!!! vielen Dank
-
2 = ERROR_FILE_NOT_FOUND
Auf deinem System gibt es also demnach kein COM1Mit der Zahl die GetLastError() ausspuckt könnte man mit FormatMessage an eine Text-Fehlermeldung kommen, in der msdn gibt es da Beispielcode:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680582.aspxAuflisten aller COM-Ports:
http://www.naughter.com/enumser.html
-
Ich frage mich, warum die Leute das Rad partout immer wieder neu erfinden wollen. Speziell für die serielle Schnittstelle gibt es gefühlt tausende freie, fertige und ausgereifte Lösungen. Die da z.B. bietet sogar ein plattformunabhängiges Interface an: https://fedorahosted.org/OpenAPC/browser/liboapc
-
Oder die hier: http://www.codeproject.com/Articles/992/Serial-library-for-C
Falls Du Boost einsetzt gibt es eine Implementierung bei Boost.Asio.
-
@deedac+theta:
Alle Programmierer leiden offenbar an einem unverbesserlichen Misstrauen am können anderer Programmierer...
Oder sie denken: Alles zu kompliziert, ich mache es viiiieeeeel einfacher...SCNR
EDIT:
Oder viel einfacher: Sie sind unfähig Google zu benutzen. gd&rvvf