tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
1199
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Frankdfe Frankdfe ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Beiträge
    151
    Hallo!

    Ich habe Probleme den COM-Port (an dem ein Drucker hängt) mit C++ zu öffnen. Der folgende Code schlägt fehl:
    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)
    GetCommState liefert false zurück und GetLastError() liefert 1 (Invalid function).
    Wenn ich aber Daten via
    Code :
    1
    
    copy a.txt com2
    versende, funktioniert das ohne Probleme.

    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.

  2. #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
     

  3. #3
    Frankdfe Frankdfe ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Beiträge
    151
    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.

  4. #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
     

  5. #5
    Frankdfe Frankdfe ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Beiträge
    151
    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.

  6. #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
     

  7. #7
    Frankdfe Frankdfe ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Beiträge
    151
    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.

  8. #8
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    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.
     

  9. #9
    Frankdfe Frankdfe ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Beiträge
    151
    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.

  10. #10
    Frankdfe Frankdfe ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Beiträge
    151
    Update:

    Ich habe mal mit dem FileMonitor untersucht, was passiert wenn ich
    Code :
    1
    
    copy a.txt com2
    eingebe. Da wird auf Dateien mit dem Namen
    Code :
    1
    2
    
    C:\WINNT\System32\spool\PRINTERS\00012.SPL und
    C:\WINNT\System32\spool\PRINTERS\00012.SHD
    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.

    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.

  11. #11
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    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?
     

  12. #12
    Frankdfe Frankdfe ist offline Mitglied Gold
    Registriert seit
    Apr 2003
    Beiträge
    151
    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

  1. Antworten: 0
    Letzter Beitrag: 13.11.10, 17:39
  2. Antworten: 7
    Letzter Beitrag: 12.06.05, 23:36
  3. kann realflow nicht öffnen…
    Von isnogood im Forum Sonstige 3D-Programme
    Antworten: 0
    Letzter Beitrag: 18.12.04, 20:27
  4. Kann nicht öffnen?
    Von b-Woy im Forum Flash Plattform
    Antworten: 7
    Letzter Beitrag: 15.08.04, 16:12
  5. Kann die rpms nicht öffnen
    Von Moartel im Forum Linux & Unix
    Antworten: 6
    Letzter Beitrag: 23.07.01, 15:36