XbpPrinter hängt sich

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Antworten
ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1027
Registriert: Mi, 28. Jul 2010 17:16

XbpPrinter hängt sich

Beitrag von ramses » Mi, 07. Aug 2013 20:22

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

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von brandelh » Mi, 07. Aug 2013 23:17

gibt es einen gültigen Druckertreiber ?
Wenn ja, passiert es auch mit einem anderen Standarddrucker ?
Gruß
Hubert

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1909
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von Herbert » Do, 08. Aug 2013 8:06

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
Grüsse Herbert
Immer in Bewegung...

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1027
Registriert: Mi, 28. Jul 2010 17:16

Re: XbpPrinter hängt sich

Beitrag von ramses » Do, 08. Aug 2013 9:44

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

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von brandelh » Do, 08. Aug 2013 10:04

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
Gruß
Hubert

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1855
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von Rolf Ramacher » Do, 08. Aug 2013 12:38

versuch es doch mal mit

XbpPrintDialog() - wo du den Drucker auswählst
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1909
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von Herbert » Do, 08. Aug 2013 13:33

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
Grüsse Herbert
Immer in Bewegung...

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13083
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von Jan » Do, 08. Aug 2013 13:59

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von brandelh » Do, 08. Aug 2013 14:13

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.
Gruß
Hubert

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1027
Registriert: Mi, 28. Jul 2010 17:16

Re: XbpPrinter hängt sich

Beitrag von ramses » Mi, 14. Aug 2013 21:36

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

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von brandelh » Mi, 14. Aug 2013 22:10

und ihr habt geprüft, ob XbpPrinter():new() tatsächlich ein Druckerobjekt zurückgegeben hat ?
Gruß
Hubert

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1027
Registriert: Mi, 28. Jul 2010 17:16

Re: XbpPrinter hängt sich

Beitrag von ramses » Do, 15. Aug 2013 9:09

@Hubert

Nein, die Rückgabe wird nicht auf NIL geprüft. Wieso? Kann xbpPrinter():new() NIL zurückgeben!?

Gruss Carlo

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von brandelh » Do, 15. Aug 2013 9:21

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.
Gruß
Hubert

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1027
Registriert: Mi, 28. Jul 2010 17:16

Re: XbpPrinter hängt sich

Beitrag von ramses » Do, 22. Aug 2013 9:29

@Hubert

Hallo Hubert die Demo-Programme deiner Druckerklasse bleiben auch hängen ......

Gruss Carlo

Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2081
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von Koverhage » Do, 22. Aug 2013 9:41

Ich hatte die Probleme nur wenn kein Standarddrucker vorhanden ist, bzw. der Standarddrucker ein PDF Drucker war.
Gruß
Klaus

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von brandelh » Do, 22. Aug 2013 10:27

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 :wink:
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von brandelh » Do, 22. Aug 2013 10:31

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.
Gruß
Hubert

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1027
Registriert: Mi, 28. Jul 2010 17:16

Re: XbpPrinter hängt sich

Beitrag von ramses » Di, 27. Aug 2013 13:39

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

Antworten