Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Druckeransteuerung mit Createfile unter WINXP (https://www.delphipraxis.net/9845-druckeransteuerung-mit-createfile-unter-winxp.html)

matz 6. Okt 2003 09:40


Druckeransteuerung mit Createfile unter WINXP
 
Hallo Gemeinde,
in einem eigenem Projekt unter Win 95/98 habe ich einen Star-Kassendrucker direkt mit 'CreateFile' und 'WriteFile' angesteuert (kein Treiber vorhanden). Das ging auch ohne Probleme. Jetzt wurde der Rechner auf WINXP umgestellt und diese Metode geht nun nicht mehr.

Bisher habe ich folgendes gemacht

Delphi-Quellcode:
MyHandle:= CreateFile(pPort, GENERIC_Write, 0,
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

setcommtimeouts(Myhandle,timeouts);

writefile(Myhandle,Atext,Laenge,test,over)
Gibt es noch Hoffnung diesen Drucker ohne Treiber auch unter WINXP anzusteuern - meine bisherigen Versuche schlugen leider fehl.

Bin für jede Hilf dankbar

Gruß Matz

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Christian Seehase 6. Okt 2003 11:11

Re: Druckeransteuerung mit Createfile unter WINXP
 
Moin Matz,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Hast Du schon mal überprüft, ob CreateFile ein gültiges Handle zurückliefert?
Für den Fall, dass das es nicht gültig ist, könntest Du Dir mal mit

Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError)));
anzeigen lassen, was schiefgegangen ist.


BTW: Bitte benütze künftig die Delphi-Tags. Danke.

matz 6. Okt 2003 11:25

Re: Druckeransteuerung mit Createfile unter WINXP
 
Danke erst einmal für die Antwort - ich werde künftig die Delphi-Tags verwenden

wenn ich die Errormessage ausgebe kommt nach CreateFile 'Vorgang erfolgreich abgeschlossen'
und nach WriteFile 'ungültiges Handel (ERROR 6)'

Christian Seehase 6. Okt 2003 11:55

Re: Druckeransteuerung mit Createfile unter WINXP
 
Moin Matz,

wird der Aufruf von SetCommTimeouts korrekt abgearbeitet?

matz 6. Okt 2003 12:10

Re: Druckeransteuerung mit Createfile unter WINXP
 
wenn ich Lasterrormesssage nach setcomtimeouts ausgebe kommt als Ergebnis 'Falscher Parameter'

Christian Seehase 6. Okt 2003 12:27

Re: Druckeransteuerung mit Createfile unter WINXP
 
Moin Matz,

da die COMMTIMEOUTS Struktur sich nicht verändert hat (gemäss PSDK keine Unterschiede von 95 bis .NET Server 2003) dürfte dann wohl das Handle wieder ungültig sein.
Hast Du mal kontrolliert welchen Wert das Handle nach CreateFile hat?

matz 6. Okt 2003 12:39

Re: Druckeransteuerung mit Createfile unter WINXP
 
Hallo Christian

das Handle hat einen Wert von 1984
ich bekomme bei setcommtimeouts ja nur True or False zurück (in meinem Fall ist es True - also scheint es zu gehen)
ich habe jetzt den Aufruf von WritFile geändert, statt dem Overlapped-Parameter übergebe ich jetzt NIL da bekomme ich nach einer Ewigkeit kein Gerät angeschlossen zurück, was ja auch stimmt da ich den Drucker zur Zeit auch nicht hier habe)
eigentlich sollte die Fehlermeldung aber schneller zurückkommen

Gruß Matz

Christian Seehase 6. Okt 2003 12:45

Re: Druckeransteuerung mit Createfile unter WINXP
 
Moin Matz,

:wall: :wall: :wall:
:oops:

Wer lesen kann ist klar im Vorteil (ich meine mich).

Das Du eine Overlapped Struktur angibst hatte ich völlig übersehen.

Für diesen Fall muss beim Parameter dwFlagsAndAttributes noch das Flag FILE_FLAG_OVERLAPPED mit angegeben werden.

matz 6. Okt 2003 12:47

Re: Druckeransteuerung mit Createfile unter WINXP
 
Danke für den Tip,

werde ich gleich mal testen - da war ja WIN95/98 ziemlich unempfindlich - das ging seit 1997 ohne Probleme

matz 6. Okt 2003 12:59

Re: Druckeransteuerung mit Createfile unter WINXP
 
wenn ich bei dem Parameter dwFlagsAndAttributes 'FILE_FLAG_WRITE_THROUGH or FILE_FLAG_OVERLAPPED' übergebe bekomme ich wieder ein ungültiges Handle :(

Christian Seehase 6. Okt 2003 13:33

Re: Druckeransteuerung mit Createfile unter WINXP
 
Moin Matz,

warum jetzt auf einmal FILE_FLAG_WRITE_THROUGH?
Probiers doch erst einmal, indem Du nur FILE_FLAG_OVERLAPPED hinzufügst.
(und vergiss nicht, die Overlapped Struktur wieder hinzuzufügen ;-))

matz 6. Okt 2003 13:54

Re: Druckeransteuerung mit Createfile unter WINXP
 
ich hatte nur 'FILE_FLAG_OVERLAPPED' als Flag und die Struktur bei Writefile auch angegeben - trotzdem ungültiges Handel
wenn ich wie ursprünglich als Flag 'FILE_ATTRIBUTE_NORMAL' angebe ohne die Strucktur bei WriteFile daeuert es ziemlich lange bis ich 'Gerät nicht angeschlossen' bekomme - das sollte eigentlich schneller gehen

ich suche schon seit dem Samstag nach einem Beispiel aber es ist nur etwas über die ser. Schnittstellen zu finden

Christian Seehase 6. Okt 2003 13:57

Re: Druckeransteuerung mit Createfile unter WINXP
 
Moin Matz,

nur um es mal zusammenzufassen.

Ich meinte das so:

Delphi-Quellcode:
MyHandle:= CreateFile(pPort, GENERIC_Write, 0,
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0);

setcommtimeouts(Myhandle,timeouts);

writefile(Myhandle,Atext,Laenge,test,over)
Also als einzige Änderung wurde FILE_FLAG_OVERLAPPED hinzugefügt. Der Rest entspricht Deinem Ursprungssource.

matz 6. Okt 2003 14:03

Re: Druckeransteuerung mit Createfile unter WINXP
 
so habe ich es auch getestet und als Ergebnis bekomme ich bei WriteFile 'ungültiges Handel'

Christian Seehase 6. Okt 2003 14:21

Re: Druckeransteuerung mit Createfile unter WINXP
 
Moin Matz,

dann fällt mir im Moment leider nichts weiter ein, als Dich auf die Suche hier zu verweisen, in der Hoffnung, dass etwas dabei ist, was Dir hilft (z.B. Parallel Port unter Windoof XP)

Hier im Forum suchenparallel, Hier im Forum suchenlpt

matz 6. Okt 2003 14:29

Re: Druckeransteuerung mit Createfile unter WINXP
 
danke Dir erst einmal


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz