XbpPrinter hängt sich

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

Moderator: Moderatoren

Antworten
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 76 Mal

XbpPrinter hängt sich

Beitrag 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
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von brandelh »

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: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag 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
Grüsse Herbert
Immer in Bewegung...
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 76 Mal

Re: XbpPrinter hängt sich

Beitrag 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
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag 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
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von Rolf Ramacher »

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: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag 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
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag 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
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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag 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.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 76 Mal

Re: XbpPrinter hängt sich

Beitrag 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
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von brandelh »

und ihr habt geprüft, ob XbpPrinter():new() tatsächlich ein Druckerobjekt zurückgegeben hat ?
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 76 Mal

Re: XbpPrinter hängt sich

Beitrag von ramses »

@Hubert

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

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag 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.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 76 Mal

Re: XbpPrinter hängt sich

Beitrag von ramses »

@Hubert

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

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag von Koverhage »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag 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 :wink:
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpPrinter hängt sich

Beitrag 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.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 76 Mal

Re: XbpPrinter hängt sich

Beitrag 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
Valar Morghulis

Gruss Carlo
Antworten