![]() |
Frage zu ZV nach beenden des Programms
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
bei einem bisher problemlos laufenden Programm, dass ich mir heute wg. einer Änderung nochmal angeschaut habe, bekomme ich beim Beenden des Programms immer eine Meldung über eine Zugriffsverletzung. Und ich habe noch nichtmal Begonnen die Änderungen einzubauen. Einfach Projekt in der IDE aufgemacht und mal F9 gedrückt und schon war der Fehler beim Schließen da. Es handelt sich um eine simple Anwendung mit nur einem (Main)-Form. Ich hab mal Haltepunkte ins OnClose des Forms gesetzt, da stept er problemlos durch und wechselt dann beim nächsten Step in die Projekdatei, steht da auf dem letzten End und da kommt dann beim nächsten Step die Fehlermeldung. Er steht dann auch nirgendwo mehr im Programmcode, es popt direkt das CPU-Fenster auf. Siehe Screen-Shot. Nachtrag: Hab in der Projektdatei immer im letzten Schritt F8 gedrückt. Jetzt mal F7 und siehe da es geht noch weiter und zwar in einer Unit HelpIntfs? Da geht er noch durch den finalization Abschnitt und da knallt es dann irgendwo glaub ich? (Zum System: Delphi 6 auf Win7 64 bit Rechner) |
AW: Frage zu ZV nach beenden des Programms
Hallo,
vielleicht wird versucht eine bereits freigegbene Instanz nochmals freizugeben - oder es wird darauf zugegriffen. Grüße Klaus |
AW: Frage zu ZV nach beenden des Programms
Ich Tippe auf einen Zugriff auf ein Object im close oder destroy, das schon gefreet wurde. Ohne Code reines Ratespiel.
|
AW: Frage zu ZV nach beenden des Programms
Wie gesagt. Das passiert mMn nachdem sämtlicher von mir geschriebener Code längst durch ist.
|
AW: Frage zu ZV nach beenden des Programms
Unsauberer Thread, oder komische Komponenten.
Zitat:
|
AW: Frage zu ZV nach beenden des Programms
Kenne ich bislang auch nur von Threads die noch irgendwo im Hintergrund gelebt haben. Gibt der Call Stack wirklich nichts vernünftiges her?
|
AW: Frage zu ZV nach beenden des Programms
Kompilier mal mit Debug-DCU's
|
AW: Frage zu ZV nach beenden des Programms
Also ich benutz da kaum was aufwendiges, keine Threads, dlls oder so. Darum wundert mich das ja alles so. Ich hab aber jetzt gemerkt, dass ich die Fehlermeldung nur in der IDE bekomme. Starte und Beende ich die .exe ausserhalb der IDE kommt keine Fehlermeldung (gut, zu dem Zeitpunkt wo der Fehler kommt ist wahrscheinlich eh nicht mehr genug Programm da, um den Fehler anzuzeigen :wink:).
Somit könnte mich das also weiter nicht stören, weil ohne IDE merkt mans ja nicht, aber es stört mich trotzdem... |
AW: Frage zu ZV nach beenden des Programms
Ich seh in deinem angehängten Bild was von IDAPI32 -> benutzt du die BDE? Und du hast ein 64-bit System?
|
AW: Frage zu ZV nach beenden des Programms
So einen komischen Fehler gab es auch mal im Zusammenhang mit den Livebindings.
Da wurde eine Komponente aus dem Speicher geworfen und eine andere Komponente hatte trotzdem noch eine Referenz darauf. Diese wurde dann im Destroy nochmals versucht zu entsorgen und dann knallte es logischerweise. Der Fehler tauchte ca. 1 min nach Beenden des Programms auf. Pervers war, dass der Fehler nur dann aufgetaucht ist, wenn die Komponenten in einer bestimmten Reihenfolge zur Designtime auf das Formular gezogen wurden ;) |
AW: Frage zu ZV nach beenden des Programms
Zitat:
Also ich hatte den Fall das beim beenden einer DB-Verbindung mit der BDE auf das schon freigebeben Screen-Objekt zugegriffen wurde. Lösung: Db-Verbindung im OnCloseQuery schließen. |
AW: Frage zu ZV nach beenden des Programms
Benutze keine BDE. DB ist Oracle via ADO->ODBC und kommt über ein Framework, auf das ich keinen Einfluss habe, das aber in anderen Anwendungen keine Fehler produziert, so dass ich da keinen Fehler vermute. Zumal ich im OnClose alle Datenbankverbindungen schließe.
Delphi-Quellcode:
procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin if fprojekt <> nil then begin try Quelle.Close; //ADOQuery Con.Close; //ADOConnection Projekt.WriteWindowPos(self); Projekt.Free; except end; end; end; |
AW: Frage zu ZV nach beenden des Programms
Zitat:
Delphi-Quellcode:
-Nachfahren einhandeln kann.
TComponent
Vor allem weil es nur in bestimmten Konstellationen auftreten kann (Reihenfolge der Erstellung zur Designtime). Dann kann man sich einen Wolf suchen |
AW: Frage zu ZV nach beenden des Programms
Woher dann wohl das "call idapi32.@_..." kommt:?:
|
AW: Frage zu ZV nach beenden des Programms
OK.OK. Ihr habt alle Recht.
Habe gerade gelernt, dass es in dem Framework noch eine Uralt dll gibt, die aus einer Oracle-Datenbank mittels BDE die Passwörter entschlüsselt ausliest. Somit @Baumina :thumb: für die BDE. @Günther: :thumb: für die Thread-Vermutung (war zwar eine dll, aber halt auch eine Struktur, die ich da nicht vermutet habe. Da das ganze aber normaleweise bisher zu funktionieren scheint: @Sir Rufo: :thumb: Für die komischen Effekte, die hier warsch. der Auslösende Faktor sind. Werd jetzt mal versuchen, ob ich diese Effekte (ohne das FrameWork) anzupacken eliminieren kann und dann bei Gelegenheit mal der GL vorschlagen ein paar Stunden darin zu investieren diesen ganzen Mechanismus im Framework "aufzuräumen". |
AW: Frage zu ZV nach beenden des Programms
Wow, alle haben Recht -> :party:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz