Com-Port lässt sich nicht öffnen ;(
-
Grüß Euch!
Es treibt mich zum Wahnsinn und ich find den Fehler nicht.
Ich versuche mit folgender Syntax einen Com-Port zu öffnen:
hInterface = CreateFile(sCommPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 0);sCommPort ist ein char-Feld, welches "COMx" enthält, für x steht dabei die gewünschte Com-Port-Nummer.
Ich hab mir natürlich vorher eine Routine geschrieben, die mir verrät, ob es den gewählten Port auf diesem Sytsem überhaupt gibt.Egal, welchen freien Port ich bei mir wähle, ich bekomme immer ein INVALID_HANDLE_VALUE als HANDLE zurück.
OS: 2k und XPprof
Vielleicht hat hier ja jemand einen Rat oder Tip für mich.
-
Wie sieht denn die schöne Routine aus, die Dir die COM-Ports liefert?
Zu beachten ist auch, dass Du ein "\.\" vor das COMx stellen solltest...Und wenn CreateFile sagt, dass die Schnittstelle nicht da ist, dann ist das so (was sagt denn GetLastError?)
-
bool CommExists (int CommPortchar) { s[6]; DWORD i; COMMCONFIG CommConfig; strcpy (s, "COMx"); s[3] = (char)(0x31 + CommPort); i = sizeof (CommConfig); return GetDefaultCommConfig (s, &CommConfig, &i); }Ach, ich muss dem String noch ein \\ voranstellen?
Das probier ich morgen mal aus.
-
Naja, zum rausfinden welche Schnittstellen es gibt ist dies nicht sehr geeignet... das liefert auch Werte für Schnittstellen die es gar nicht gibt...
http://www.codeproject.com/system/listports.asp
http://www.codeproject.com/system/cserialport.asp
http://codeproject.com/system/setupdi.asp
-
Moment einmal:
Wir befinden uns hier doch in der Abteilung WINAPI, nicht in der Abteilung MFC oder VCL.
Ich hab folgendes probiert:
strcpy (cCommPort, "\\\.\\COMx");
Keine Chance.
Hat einer einen Tip, wie man die COM nun mit welchem String öffnen kann?
-
Moment mal! Hat jemand was anderes behauptet?
Wenn Du hoffentlich nicht "COMx" gemaint hast, sondern "COM1" (oder irgendwas anderes mit einer Zahl), dann gibt es den Port nicht oder er ist von einem anderen Programm belegt . (Punkt)Versuche doch mal einfach den gleichen Port mit dem Hyperterminal zu öffnen...
-
Wofür das "x" steht und wodurch es ersetzt wird ist weiter oben beschrieben.
Mit dem Hyperterminal klappt das wunderbar und auf Anhieb.

-
Bei mir funktioniert das folgende wunderbar:
#include <windows.h> #include <tchar.h> #include <stdio.h> int _tmain() { HANDLE hFile = CreateFile(_T("\\\\.\\COM1"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) { _tprintf(_T("Error: %x"), GetLastError()); } else CloseHandle(hFile); }Lass bitte man diesen Code bei Dir laufen (mit der passenden Schnittstelle)
-
Oh Gott, es lag an mir.
Ich hab durch einen Programmierfehler versucht, nach dem Öffnen der Scnittstelle diese nochmal zu öffnen.
Dies kann natürlich nicht funktionieren.
Code debuggt und alles OK.
Danke für die Hilfe!