Seite 1 von 1
XbpPrinter hängt sich
Verfasst: Mi, 07. Aug 2013 20:22
von ramses
Bei einigen PC's habe ich das Problem dass XbpPrinter sporadisch bei der Methode create() hängt. Es ist dann nur noch Programmabbruch mit Alt-C möglich.
Code: Alles auswählen
oDC := XbpPrinter():new()
oDC:create() <-- Programm bleibt hier hängen
In der XppFatal steht dann:
- FATAL ERROR LOG
Abort with Alt-C
SYS Thread-ID: 756
Module: EVM
Error Codes: EH: 11 Sub: 0(0) OS: 0 XPP: 0
Call Stack of Thread 1 (568):
U174DRUCKERAUSWAHL(370) --> Zeile mit oDC:create()
Das ganze läuft unter Windows 7 64 Bit, hat jemand eine Ahnung an was das Problem liegen könnte?
Gruss Carlo
Re: XbpPrinter hängt sich
Verfasst: Mi, 07. Aug 2013 23:17
von brandelh
gibt es einen gültigen Druckertreiber ?
Wenn ja, passiert es auch mit einem anderen Standarddrucker ?
Re: XbpPrinter hängt sich
Verfasst: Do, 08. Aug 2013 8:06
von Herbert
Carlo,
mach nur das new() ohne create. Wenn die Antwort NIL ist, hast du keinen Drucker installiert.
Code: Alles auswählen
LOCAL aPrinters[0], oPrn
oPrn := XbpPrinter():new()
AADD(aPrinters,'Kein Drucker')
IF oPrn # NIL // Druckerobject wurde erzeugt.
aPrinters := oPrn:list()
ENDIF
return aPrinters
Re: XbpPrinter hängt sich
Verfasst: Do, 08. Aug 2013 9:44
von ramses
Danke für die Tips, leider helfen diese nicht weiter....
Auf dem PC sind 3 Netzwerkdrucker (Freigabe von Server) sowie PDF-Creator installiert. Ich habe gestern alle 4 gelöscht und mit aktuellen Treibern neu installiert. Ohne Erfolg.
Merkwürdig ist dass ich z.B. 6 von 10 Dokumenten(einer Serie Packetzettel) drucken kann, beim 7. hängt das Programm in einer Zeile oDC:create() bezw. oDC:create( cDrucker )
Wärend das Programm hängt kann z.B. mit Word problemlos auf alle Drucker gedruckt werden, obwohl mein xBase Programm noch immer hängt.
Gruss Carlo
Re: XbpPrinter hängt sich
Verfasst: Do, 08. Aug 2013 10:04
von brandelh
Machst du für jedes Dokument einen neuen Drucker auf und zerstörst den danach wieder ?
Warum ?
Es reicht doch das aktuelle Dokument zu beenden und mit dem neuen weiter zu machen.
Eventuell gibst du die Druckerresourcen beim Ende von XbpPrinter():destroy() nicht richtig frei ?
Hier habe ich mein Destroy:
Code: Alles auswählen
*-------------------------------------------------------------------
METHOD _HBPrinter:DestroyPS( oPS )
LOCAL oDC := oPS:device() // oDC entspricht dem XbpPrinter()
IF oDC <> NIL
oPS:configure()
if oDC:Status() = XBP_STAT_CREATE
oDC:destroy()
endif
if oPS:Status() = XBP_STAT_CREATE
oPS:destroy()
endif
ENDIF
RETURN SELF
PS: HBPrinter() wird nicht von XbpPrinter() abgeleitet, sondern entspricht eher einem PresentationSpace
Re: XbpPrinter hängt sich
Verfasst: Do, 08. Aug 2013 12:38
von Rolf Ramacher
versuch es doch mal mit
XbpPrintDialog() - wo du den Drucker auswählst
Re: XbpPrinter hängt sich
Verfasst: Do, 08. Aug 2013 13:33
von Herbert
Ich denke, Hubert, unser Super-Drucker-Spezialist, hat Recht. Am Ende des Druckjobs, falls nicht noch mehr zum Drucken folgt, muss das Objekt zerstört werden.
Code: Alles auswählen
oPS:device():endPage()
oPS:device():endDoc()
DestroyDevice( oPS )
wobei oPS so entsteht:
Code: Alles auswählen
oDC := XbpPrinter():New() // Default - Printer nehmen
oDC:Create( cPrinterObjectName )
... setzen Papiergrösse, Schacht, Orientierung...
oPS := XbpPresSpace():New()
...
oPS:Create( oDC, aSizeP, GRA_PU_LOMETRIC ) // auf mm einstellen
Re: XbpPrinter hängt sich
Verfasst: Do, 08. Aug 2013 13:59
von Jan
Wenn der Druckvorgang komplett abgeschlossen ist, dann mache ich eine Aufräumaktion:
Code: Alles auswählen
oDrucker:destroy()
oPS:destroy()
oDrucker := NIL
oPS := NIL
Damit fahre ich sehr gut. Vorher hatte ich ab und an auch mal merkwürdige Phänomene, aber mit dieser Kombination nie wieder.
Jan
Re: XbpPrinter hängt sich
Verfasst: Do, 08. Aug 2013 14:13
von brandelh
Zur Verdeutlichung ...
Man KANN ein Druckerobjekt erstellen und für mehrere Ausdrucke verwenden:
Code: Alles auswählen
oXbP steht für ein XbpPrinter() Objekt
oPS steht für das zugeordnete PresentationSpaceObjekt
* 20 Dokumente drucken ...
oXbP und oPS erstellen und zuordnen ... (steht in Hilfe)
for x = 1 to 20
oXbP:StartDoc()
// mach was
oXbP:EndDoc() // kein :NewPage() vor EndDoc() ohne Text, sonst gibt es eine leere Seite !
next
* keine Ausdrucke mehr
oXbP und oPS destroyen ! (steht auch in Hilfe)
das geht auch, dauert aber länger !!!
Code: Alles auswählen
oXbP steht für ein XbpPrinter() Objekt
oPS steht für das zugeordnete PresentationSpaceObjekt
* 20 Dokumente drucken ...
for x = 1 to 20
oXbP und oPS erstellen und zuordnen ... (steht in Hilfe)
oXbP:StartDoc()
// mach was
oXbP:EndDoc() // kein :NewPage() vor EndDoc() ohne Text, sonst gibt es eine leere Seite !
oXbP und oPS destroyen ! (steht auch in Hilfe)
next
... keine Ausdrucke mehr
aber so gehen einem schnell die Resourcen (Druckerhandles) aus, insbesondere auf einem TerminalServer
Code: Alles auswählen
oXbP steht für ein XbpPrinter() Objekt
oPS steht für das zugeordnete PresentationSpaceObjekt
* 20 Dokumente drucken ...
for x = 1 to 20
oXbP und oPS erstellen und zuordnen ... (steht in Hilfe)
oXbP:StartDoc()
// mach was
oXbP:EndDoc() // kein :NewPage() vor EndDoc() ohne Text, sonst gibt es eine leere Seite !
next
... keine Ausdrucke mehr
und wer glaubt dass die 3. Art in einer Funktion nach dem ENDE dieser keine Probleme verursacht irrt.
Xbase++ räumt zwar SEINE Variablen (hier oXbp und oPS) auf, aber eben nicht die Betriebssystem handles, dafür ist destroy() nötig.
Re: XbpPrinter hängt sich
Verfasst: Mi, 14. Aug 2013 21:36
von ramses
Nach genauer Beobachtung haben wir herausgefunden dass der Hänger des Programms durchaus auch beim ersten Aufruf von oDC:Create() Auftritt.
Auch das vollstängige Entfernen und neuinstallieren aller Druckertreiber in der neuesten Version haben nichts gebracht.
Langsam kommt jetzt doch Verzweiflung auf .........
Gruss Carlo
Re: XbpPrinter hängt sich
Verfasst: Mi, 14. Aug 2013 22:10
von brandelh
und ihr habt geprüft, ob XbpPrinter():new() tatsächlich ein Druckerobjekt zurückgegeben hat ?
Re: XbpPrinter hängt sich
Verfasst: Do, 15. Aug 2013 9:09
von ramses
@Hubert
Nein, die Rückgabe wird nicht auf NIL geprüft. Wieso? Kann xbpPrinter():new() NIL zurückgeben!?
Gruss Carlo
Re: XbpPrinter hängt sich
Verfasst: Do, 15. Aug 2013 9:21
von brandelh
ja, das kann passieren, wenn ein Fehler auftritt. Daher immer NEW() von CREATE() trennen:
Code: Alles auswählen
LOCAL oPrn
oPrn := XbpPrinter():new()
IF oPrn = NIL
Fehlermeldung
ELSE
// mit oPrn:List() könnte man die Liste der installierten Drucker ermitteln.
// wenn man einen davon als Text an Create() übergibt, wird dieser statt dem Standarddrucker genutzt.
oPrn:create() // für Standarddrucker
...
ENDIF
PS: bei meiner HBPrinter Klasse wird immer ein HBPrinter Objekt erzeugt, aber wie schon geschrieben ist diese Klasse nicht von XbpPrinter abgeleitet.
Re: XbpPrinter hängt sich
Verfasst: Do, 22. Aug 2013 9:29
von ramses
@Hubert
Hallo Hubert die Demo-Programme deiner Druckerklasse bleiben auch hängen ......
Gruss Carlo
Re: XbpPrinter hängt sich
Verfasst: Do, 22. Aug 2013 9:41
von Koverhage
Ich hatte die Probleme nur wenn kein Standarddrucker vorhanden ist, bzw. der Standarddrucker ein PDF Drucker war.
Re: XbpPrinter hängt sich
Verfasst: Do, 22. Aug 2013 10:27
von brandelh
Sind das lokale oder netzwerkdrucker ?
Meine Druckerklasse meldet übrigens auch Fehler, wenn die Druckerwarteschlange auf "angehalten" steht ... das muss nicht sein.
Bei Netzwerkdrucker sind jede Menge Fehler möglich, aber wenn aus dem Druckerdialog heraus eine Testseite gedruckt werden kann (also direkt vom Treiber/OS), dann sollte auch Xbase++ drucken können.
PS: nicht alle meine Beispiele räumen richtig auf
... wenn man meine PrinterDialog nutzt, räumt der beim Schließen des Fensters auf, ansonsten müsste es da sein, aber bei kleinen Testprogrammen kommt eine solche Nachlässigkeit schon mal vor
Re: XbpPrinter hängt sich
Verfasst: Do, 22. Aug 2013 10:31
von brandelh
Lokale PDF Drucker sollten immer funktionieren, aber bei einem Terminalserverprogramm könnte eventuell der Bildschirm mit der Namensabfrage hinter das eigentliche Programm gerutscht sein oder gar nicht angezeigt werden ... alle Nachfragen sind da potentiell problemeatisch.
Re: XbpPrinter hängt sich
Verfasst: Di, 27. Aug 2013 13:39
von ramses
Hi
nachdem ich, aus purer Verzweiflung, auf dem Server bei allen Druckern den Hacken bei "Bidirektionale Unterstützung" entfernt habe ist das Problem nun seit 2 Tagen nicht mehr aufgetreten.
Gruss Carlo