ERLEDIGT
JA
JA
ANTWORTEN
11
11
ZUGRIFFE
1199
1199
EMPFEHLEN
-
Hallo!
Ich habe Probleme den COM-Port (an dem ein Drucker hängt) mit C++ zu öffnen. Der folgende Code schlägt fehl:
GetCommState liefert false zurück und GetLastError() liefert 1 (Invalid function).Code :1 2 3 4 5 6 7 8
HANDLE hcom; DCB dcb; BOOL b; hcom = CreateFile ("COM2", GENERIC_READ | GENERIC_WRITE, 0,0,OPEN_EXISTING, 0,0); b=GetCommState (comm, &dcb)
Wenn ich aber Daten viaversende, funktioniert das ohne Probleme.Code :1
copy a.txt com2
Woran könnte das liegen?Geändert von Frankdfe (13.06.05 um 11:05 Uhr)
Der Glückliche phantasiert nie. (Sigmund Freud)
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)
Daraus folgt: Die Genie's sind nicht glücklich.
-
13.06.05 11:14 #2
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Also eigentlich hängt der Drucke nicht an Com sondern an LPT.
mfg
umbrasaxum
-
Aber nicht bei Barcode-Druckern.
Der Glückliche phantasiert nie. (Sigmund Freud)
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)
Daraus folgt: Die Genie's sind nicht glücklich.
-
13.06.05 11:26 #4
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Sach das doch gleich.
Warum speicherst du den Handle den CreateFile zurück gibt in "hcom" und verwendest bei GetCommState "comm"?
mfg
umbrasaxum
-
Hups. Das hab' ich wohl beim rüberkopieren eingebaut. Es müsste auch bei GetCommState hcom heißen.
Der Glückliche phantasiert nie. (Sigmund Freud)
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)
Daraus folgt: Die Genie's sind nicht glücklich.
-
13.06.05 11:35 #6
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Hmmm, mach mal vor GetCommState noch
Code :1
dcb.DCBlength = sizeof(DCB);
mfg
umbrasaxum
-
Funktioniert auch nicht.
Übrigens ist in dcb nach dem GetCommState-Aufruf, alles bis auf DCBlength und fBinary(=1) auf 0 gesetzt.Der Glückliche phantasiert nie. (Sigmund Freud)
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)
Daraus folgt: Die Genie's sind nicht glücklich.
-
Hast du überprüft, ob du nach CreateFile ein gültiges Handle (ungleich INVALID_HANDLE_VALUE) hast? Wenn nicht, ruf mal GetLastError auf, und lass dir den Wert ausgeben.
Versuch mal spasshalber "\\\\.\\COM2" als Dateinamen, manchmal spinnt Windows da rum.
-
Das Handle ist gültig (=4c) und \\\\.\\COM2 funktioniert auch nicht.
Ich hatte schonmal einen anderen Barcode-Drucker hier, mit dem mein Programm funktioniert hat. Allerdings kann ich nicht überprüfen, ob es mit dem alten Drucker immer noch funktioniert. Vielleicht hat sich ja was geändert (habe u.a. einen Druckertreiber für den neuen Drucker installiert)Der Glückliche phantasiert nie. (Sigmund Freud)
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)
Daraus folgt: Die Genie's sind nicht glücklich.
-
Update:
Ich habe mal mit dem FileMonitor untersucht, was passiert wenn icheingebe. Da wird auf Dateien mit dem NamenCode :1
copy a.txt com2
zugegriffen bzw. diese erstellt und wieder gelöscht. Es scheint also so zu sein, als ob der Druckertreiber den direkten Zugriff auf den COM-Port abfängt. Weiß hier jemand, wie sowas funktioniert oder kennt jemand eine Tutorial zu dem Thema (also Treiber und was passiert wenn ich auf "dessen" Port zugreife) ? Ansonsten funktioniert mein Programm immer noch nicht.Code :1 2
C:\WINNT\System32\spool\PRINTERS\00012.SPL und C:\WINNT\System32\spool\PRINTERS\00012.SHD
Helft mir!
Der Glückliche phantasiert nie. (Sigmund Freud)
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)
Daraus folgt: Die Genie's sind nicht glücklich.
-
Blöde Frage:
Du bekommst ja offensichtlich ein gültiges HANDLE zurück. Ich kann mir vorstellen, dass durch das Eingreifen des Druckertreibers da evtl. ein GetCommState nichts Sinnvolles zurückgibt (bei Druckertreibern hakt es ja grundsätzlich am Auslesen von Daten).
Klappt denn nur das GetCommState nicht oder kannst du denn einfach in das Handle reinschreiben?
-
Es funktioniert!
Ich hatte die (beim alten Gerät eingesetzten) Befehle GetCommState und SetCommTimeouts ausprobiert, welche fehlschlugen. Aber einfach direkt schreiben klappt. Hätte ich eigentlich gleich probieren können.
Danke euch beiden!Der Glückliche phantasiert nie. (Sigmund Freud)
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)
Daraus folgt: Die Genie's sind nicht glücklich.
Ähnliche Themen
-
Netbeans kann Projekt nicht öffnen / Projektordner wird nicht erkannt
Von CPoly im Forum JavaAntworten: 0Letzter Beitrag: 13.11.10, 17:39 -
[C++] virtueller COM Port kann nicht angesprochen werden
Von MartinFS im Forum C/C++Antworten: 7Letzter Beitrag: 12.06.05, 23:36 -
kann realflow nicht öffnen…
Von isnogood im Forum Sonstige 3D-ProgrammeAntworten: 0Letzter Beitrag: 18.12.04, 20:27 -
Kann nicht öffnen?
Von b-Woy im Forum Flash PlattformAntworten: 7Letzter Beitrag: 15.08.04, 16:12 -
Kann die rpms nicht öffnen
Von Moartel im Forum Linux & UnixAntworten: 6Letzter Beitrag: 23.07.01, 15:36





Zitieren
Login






