XbpPrintDialog()

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

Moderator: Moderatoren

Antworten
guentergurland
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mo, 29. Okt 2007 18:38

XbpPrintDialog()

Beitrag von guentergurland »

Hallo,

zunächst Allen viel Erfolg in 2014.

Ich habe seit kurzem ein Problem und hoffe jemand kann mir einen Tip geben.

Auf einem PC laufen 2 Programme. Beide identisch (dll, lib, ch, xBase-Version, etc.)
Der Programmcode für die Druckerausgabe ist bei beiden identisch.

Code: Alles auswählen

FUNCTION PRINTER_WAHL( oDlg0 )

 LOCAL oPrinter, oDlg, aPrintPara[7]

 oPrinter := XbpPrinter():new()

 IF oPrinter:list() == NIL
   FEHL_TEXT( oDlg0, 300, "Kein Drucker installiert.", .F.)
   RETURN ( {} )
 ENDIF

 oDlg := XbpPrintDialog():new( oDlg0 ):create()

 oPrinter := oDlg:display()

 IF oPrinter==NIL
   RETURN ( {} )
 ENDIF

......................

Ich versuche aus Programm1 zu drucken, kein Problem. Das Dialogfenster von Windows (Druckerauswahl) erscheint.

Ich versuche aus Programm2 zu drucken, Absturz. Fehlermeldung :

BASE/5
... interne Datenbankstruktur beschädigt ....
XBPPRINTDIALOG:DISPLAY(428)

Danach folgen Angaben zu Funktionsaufrufen.

An dieser Stelle erfolgt der Absturz :

Code: Alles auswählen

oPrinter := oDlg:display()
Das Programm2 muß über den Taskmanager beendet werden.


Das Merkwürdige : Ich starte danach das Programm2 neu, wähle wieder Ausgabe, aber diesmal zunächst Ausgabe als Datei. Kein Problem. Danach versuche ich zu drucken, auch kein Problem.

Für jeden Tip wäre ich dankbar.

Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: XbpPrintDialog()

Beitrag von AUGE_OHR »

hi,

Code: Alles auswählen

oPrinter := XbpPrinter():new()
und wo ist das o:Create() ?

Code: Alles auswählen

oPrinter := oDlg:display(<oXbpPrinter>)
wenn du vorher ein XbpPrinter Object schon angelegt hast dann solltest du es auch übergeben und nicht "überschreiben" denn das ist kein o:Destroy()

p.s. nach einem Absturz ist auch der Speicherbereich nicht mehr im Zugriff
gruss by OHR
Jimmy
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: XbpPrintDialog()

Beitrag von brandelh »

Hi,

da er nur oPrinter:list() aufruft, ist das kein Problem und solange man KEIN :create() ausgeführt hat, kann auch kein :destroy() nötig sein.

Aber ich sehe hier ein Problem, sobald der Befehl oPrinter:list() NIL zurückgibt !
Das kann passieren !
Ebenso wird oPrinter selbst nicht zurückgegeben, vermutlich wurde die Zeile RETURN oPrinter hier vergessen.

Code: Alles auswählen

FUNCTION PRINTER_WAHL( oDlg0 )
   LOCAL oPrinter, oDlg, aPrintPara[7]
   oPrinter := XbpPrinter():new()
   IF empty(oPrinter) .or. oPrinter:list() == NIL
      FEHL_TEXT( oDlg0, 300, "Kein Drucker installiert.", .F.)
      RETURN ( {} )
   ENDIF
   oDlg := XbpPrintDialog():new( oDlg0 ):create()
   oPrinter := oDlg:display()
   IF oPrinter==NIL
      RETURN ( {} )
   ENDIF
RETURN ...
Gruß
Hubert
guentergurland
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 30
Registriert: Mo, 29. Okt 2007 18:38

Re: XbpPrintDialog()

Beitrag von guentergurland »

Hallo,

zunächst Danke für Eure schnellen Antworten.
Aber das Problem, ist doch folgendes :
Wieso funktioniert es in dem einen Programm und in
dem anderen nicht ? Beide Programme laufen auf dem gleichen PC, es gibt
also Hard- und Software-seitig keine Unterschiede.
Das Programm, das den Fehler hervorruft, läuft auf vielen anderen PC's seit
Jahren problemlos. Es muß also andere Ursachen haben.

Günter
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: XbpPrintDialog()

Beitrag von brandelh »

guentergurland hat geschrieben:... interne Datenbankstruktur beschädigt ....
ich vermute du meinst die berüchtigte ... interne Datenbankstruktur beschädigt ....
Diese entsteht, wenn auf eine DLL / Systemresource zugegriffen wird, die nicht sauber initialisiert wurde.

Dass beide Programme auf dem gleichen PC laufen könnte ein Grund für die Fehlermeldung sein.
Wenn es NUR auf diesem PC geschieht, könnte ein Fehler im Druckertreiber vorliegen.

Daher mein Rat, immer prüfen ob ein Objekt eventuell NIL ist, bevor man darauf zugreift.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: XbpPrintDialog()

Beitrag von AUGE_OHR »

brandelh hat geschrieben:da er nur oPrinter:list() aufruft, ist das kein Problem und solange man KEIN :create() ausgeführt hat, kann auch kein :destroy() nötig sein.
YUP ...
ich wollte primär sehen "wie" er ein Create() ausführen würde

Code: Alles auswählen

IF oDC:Create( cPrinter ) == oDC           // = self
und wie er den XbpPresSpace() damit verknüpft und natürlich wie er alles wie er frei gibt.

so wie ich das sehe bedeute die Fehlermeldung das die Objecte nicht freigegeben wurden und deshalb die "Structur zerstört" ist.
gruss by OHR
Jimmy
Antworten