[C++] virtueller COM Port kann nicht angesprochen werden

MartinFS

Mitglied
Hallo,

... es gibt mal wieder ein Problem. :(

Ich habe hier einen USB zu seriell Verteiler, der mittels "virtuellen COM Port Treibern" ins System eingebunden wird.
Ich möchte die dort an den seriellen Ports angeschlossenen Geräte gerne ansprechen. Habe dafür mit den BCB6 ein kleines C++ Programm geschrieben, das aber leider nicht funktioniert.
Werden die Geräte direkt an die COM Ports des Computers angeschlossen funktioniert das Programm allerdings problemlos.

hier mal der enscheidene Codeschnipsel:
Code:
AnsiString COM_a = "COM";
AnsiString port_a = com_port;
COM_a += port_a;
char *port = COM_a.c_str(); // Casting, für hCom CreateFile
DCB dcb;
hCom = CreateFile ( port,
			GENERIC_WRITE | GENERIC_READ,
			 0,
			 NULL,
			 OPEN_EXISTING,
			 0,
			 NULL);
dcb.DCBlength = sizeof(DCB);	// setzen der Blocklaenge, muss erfolgen
GetCommState (hCom, &dcb);		 // COM-Einstellungen laden
dcb.BaudRate = 9600;		 // Baudrate einstellen, hier 9600
dcb.ByteSize = 8;			 // Datenbits einstellen, hier 8
dcb.Parity	= NOPARITY;	 // Parität einstellen, hier keine Parität
dcb.StopBits = ONESTOPBIT;	 // Stopbits einstellen, hier 1
SetCommState (hCom, &dcb);	 // COM-Einstellungen speichern
if (hCom == INVALID_HANDLE_VALUE)
{
	 Application->MessageBox("Serielle Schnittstelle konnte nicht geöffnet werden\n", COM_a.c_str(), MB_ICONEXCLAMATION);
}


Die "INVALID_HANDLE_VALUE"-Message wird mir immer angezeigt, wenn die Geräte an den seriellen Anschlüssen des Verteilers sitzen.


Jemand eine Idee, wodran das liegen könnte?


Thx.

mFS
 
moin


Sicher das du dafür keinen Treiber benutzen musst?
Ansonsten kannst du mal GetLastError benutzen dann bekommst du wahrscheinlich ein bischen mehr Informationen über den Fehler.
Und gib COM mal ne NUmmer mit.


mfg
umbrasaxum
 
Zuletzt bearbeitet:
Hi,

extra Treiber sind da glaube ich nicht nötig (denke ich mal). Im System (Gerätemanager) sind die ja auch aufgelistet.
was ich vergessen habe zu erwähnen: Der Zugriff über ein HyperTerminal Programm funktioniert!

Er zeigt mir Fehler 6 an (wenn ich das auf die schnelle richtig implementiert habe).

Was meinst Du mit "COM Nummer mitgeben"?

gruß,
mFS
 
Axo meinst Du das....

Habe ich doch mit:

Code:
AnsiString port_a = com_port;
COM_a += port_a;
Da wird auch "COM" die Nummer rangehangen.
 
Hi,

ist ja kein Problem. :)

Aber kann Fehlercode 6 stimmen? Habe bisher gefunden: "Die Zugriffsnummer ist nicht defintiert".... aber ob das die richtige Fehlerbeschr. ist?
 
*grübel*

Der Verteiler bietet insgesamt 8 DB9 Anschlüsse. Ich habe im Gerätemanager eine der 8 auf COM7 gesetzt und siehe da, es kommt keine Fehlermeldung mehr. Ob die Verbindung dann auch wirklich 100% funktioniert kann ich leider erst nächste Woche testen (Router habe ich nicht hier....).
Scheint irgendwie so, als ob der nur einstellige Nummer akzeptiert. Muss ich das verstehen? War früher ja mit 16 Bit Programm so, aber daran kann es ja wohl nicht liegen.

gruß,
mFS
 
Zurück