Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unterschied Opendialog/Savedialog .Execute zwischen D10.4.1 <-> D10.3.3 (https://www.delphipraxis.net/205706-unterschied-opendialog-savedialog-execute-zwischen-d10-4-1-d10-3-3-a.html)

AJ_Oldendorf 8. Okt 2020 08:18

Unterschied Opendialog/Savedialog .Execute zwischen D10.4.1 <-> D10.3.3
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,
ich habe folgendes Problem:

Eine sehr umfangreiche Anwendung (kann kein Source posten und bekomme es kurioserweise nicht nachgestellt in einer Testanwendung) läuft unter Delphi 10.3 ohne Probleme. Es geht konkret um OpenDialoge/SaveDialoge, dass Execute.

Genau die gleiche Anwendung nach Delphi 10.4.1 kopiert, führt bei den genau den gleichen OpenDialogen/SaveDialogen im Execute zu einer Debugger Exception.
Beim Anhalten lande ich irgendwo, womit ich nichts anfangen kann (siehe Anhang).
Beim Fortsetzen geht die Meldung kurz weg, kommt aber sofort wieder (siehe Anhang).

Wenn ich das Execute auskommentiere und direkt die Datei öffne/speichere mit den Funktionen die "hinter" dem Execute stehen, geht auch alles. Es liegt wirklich an dem Execute und ich kann beide Anwendungen unter D10.3.3 und D10.4.1 nebeneinander halten und die Exception entsteht immer genau in dem Moment, wo der Dialog kurz aufgeht (man sieht ihn also) und dann kommt sofort die Exception.

Hat dazu jemand eine Idee?

Klaus01 8. Okt 2020 08:28

AW: Unterschied Opendialog/Savedialog .Execute zwischen D10.4.1 <-> D10.3.3
 
.. vielleicht mal MadExcept installieren und dort den Stack anschauen.

Grüße
Klaus

himitsu 8. Okt 2020 08:35

AW: Unterschied Opendialog/Savedialog .Execute zwischen D10.4.1 <-> D10.3.3
 
Knallt es beim Aufrufen/Anzeigen oder erst nach Dateiauswahl/Schließen?

Der Delphi Debugger hat bereits auch schon einen Stacktrace. :angle:
(hier, im Debugger, braucht man nicht unbedingt MadExcept, Eurekalog und Co.)

Der Fehler kann aber auch dem Windows-Explorer kommen.
Diese Fenster kommen von ihm und z.B. Filter, Icons, OverlayIcons und den Preview kommen aus Plugins von/in Ihm.

Speicheradressen aus Fehlermeldung (gibt es hier nicht) oder aus der Assembleransicht sagen garnichts aus, ohne dass man weiß welches Modul (EXE/DLL) an dieser Adresse liegt.
Ohne den Stacktrace können wir hier also nichts erkennen. (falls der Stack nicht gefüllt wird, noch einmal [F7] probieren.

In Win64 braucht man jetzt mit StackFrames und Dergleichen nicht mehr zu kämpfen ... dort gibt es nur noch eine CallingConvention und die Frames sind, glaub ich, auch immer aktiv.

hoika 8. Okt 2020 08:43

AW: Unterschied Opendialog/Savedialog .Execute zwischen D10.4.1 <-> D10.3.3
 
Hallo,
ist es wirklich der 100% gleiche Quellcode?

Was machst Du zwischen dem Create und Execute des Dialoges?

AJ_Oldendorf 8. Okt 2020 08:51

AW: Unterschied Opendialog/Savedialog .Execute zwischen D10.4.1 <-> D10.3.3
 
Liste der Anhänge anzeigen (Anzahl: 2)
Also der Fehler entsteht sofort, wenn man den Dialog sieht. Man schafft es gar nicht erst, etwas anzuklicken...

Ist das der Stacktrace, den du meinst @himitsu?
Der erste Screenshot ist beim Anhalten, der zweite nach 1x F7 drücken.

@hoika: Absolut identischer Source. Ich habe D10.3.3 in einer VM, D10.4.1 im Host.
Ich kopiere immer das gesamte Source Verzeichnis. D10.3.3 läuft. D10.4.1 nicht.

AJ_Oldendorf 8. Okt 2020 08:52

AW: Unterschied Opendialog/Savedialog .Execute zwischen D10.4.1 <-> D10.3.3
 
Achso, habe mich in das Execute mal rein debuggt.
Es knallt genau hier:

Vcl.Dialogs:
function TCustomFileDialog.Execute(ParentWnd: HWND): Boolean;

Result := Succeeded(Show(ParentWnd)); //<--- hier knallt es

Wenn ich bei der Debugger Exception den Haken setze für, ignoriere diese Exception, dann läuft auch alles normal weiter. Ich kann den Dialog bedienen und auch auf Speichern klicken...

AJ_Oldendorf 8. Okt 2020 09:17

AW: Unterschied Opendialog/Savedialog .Execute zwischen D10.4.1 <-> D10.3.3
 
noch zwei Erkenntnisse:
Ich habe jetzt 26x auf Fortsetzen geklickt (in der Debugger Exception) und danach kam diese nicht mehr und ich kann den Dialog (SaveDialog) ganz normal bedienen...

Die Exception kommt nur, wenn ich die Anwendung aus dem Debugger starte. Starte ich die Exe so, dann klappt alles ohne Probleme.

Bernhard Geyer 8. Okt 2020 11:26

AW: Unterschied Opendialog/Savedialog .Execute zwischen D10.4.1 <-> D10.3.3
 
C0000005 hört sich nach externe Exception an.
Ich würde darauf Tippen das sich eine ShellExtension mit der Delphi 10.4-IDE/Debugger beißt.

AJ_Oldendorf 8. Okt 2020 12:17

AW: Unterschied Opendialog/Savedialog .Execute zwischen D10.4.1 <-> D10.3.3
 
Im konkreten Fall geht es um eine CSV Datei zum speichern.
Aber selbst, wenn ich InitialDir/Filter/DefaultExt/FileName des Dialoges nicht setze (vor dem Execute), entsteht die Exception beim Execute.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 Uhr.

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