![]() |
Zugriffsverletzung beim Ausführen von Halt
Hallo zusammen,
ich habe ein mittlerweile ziemlich grosses Projekt. Das Hauptmodul sieht folgendermaßen aus:
Delphi-Quellcode:
Das Programm läuft im normalfall ganz normal ohne Fehler, es wird auch ohne Fehler beendet.
Application.Initialize;
Application.Title := 'SoftwareTest'; Application.CreateForm(Tfrm_MDI, frm_MDI); Application.CreateForm(Tfrm_DBSetup, frm_DBSetup); Application.CreateForm(Tfrm_Setup, frm_Setup); Application.CreateForm(Tfrm_DDE, frm_DDE); if not (frm_MDI.KDRReg.CheckReg(TRUE)) then Halt; Application.CreateForm(Tfrm_Setup, frm_Setup); Application.CreateForm(Tfrm_Designer, frm_Designer); frm_Setup.Init; frm_DBSetup.Init; frm_MDI.Init; if not (Tfrm_Login.Create(nil).Execute(vmastermode)) then Halt; frm_MDI.InitAfterLogin(vmastermode); Application.Run; frm_MDI.DeInit; Komme ich aber an die beiden Punkte wo es mit Halt das Programm verlässt fliegt das Programm mit einem Speicherzugriffsfehler + anschließendem Runtime Error 216 raus. Ich habe auch das Produkt Eurekalog, leider zeigt es mir auch nur im Callstack die Zeile in dem der Halt steht. Das Problem muss irgendwie innerhalb der letzten 2 Wochen entstanden sein. Leider habe ich so viel in der Zeit daran geändert, das ich nicht mehr durch ausprobieren rausfinden kann, was der Grund ist. Ein Application.Terminate bringt nicht den gewünschten erfolg, da dann das Programm auf jedenfall durchstartet, und danach erst abbricht (fehlerfrei). Habe ich irgendeine Möglichkeit diesen Fehler zu finden? Danke für jeden Tipp Oliver |
Re: Zugriffsverletzung beim Ausführen von Halt
Hi,
was ist, wenn Du die letzten 4 Zeilen so abänderst:
Delphi-Quellcode:
Dann müsste sich das Programm theoretisch einfach normal beenden, falls das Login falsch ist.
if Tfrm_Login.Create(nil).Execute(vmastermode) then
begin frm_MDI.InitAfterLogin(vmastermode); Application.Run; frm_MDI.DeInit; end; mfG mirage228 |
Re: Zugriffsverletzung beim Ausführen von Halt
Hallo, habs probiert, funktioniert auch nicht.
Es hat auch nichts mit dem DeInit zu tun, da wird nur ein Logout in die DB geschrieben und die Einstellungen in die Registry gespeichert. |
Re: Zugriffsverletzung beim Ausführen von Halt
Hallo,
arbeitest Du im Finalization-Abschnitt einer Unit mit einer Objektinstanz, die erst in den Init-Methoden (z.B. frm_Setup.Init) erzeugt wird? Gruß Hawkeye |
Re: Zugriffsverletzung beim Ausführen von Halt
Da gibts doch auch noch den Application.terminate; Befehl vielleicht hilft der ja weiter.
|
Re: Zugriffsverletzung beim Ausführen von Halt
@Corpsman
Zitat:
|
Re: Zugriffsverletzung beim Ausführen von Halt
Ich denke, dass es irgendeine Kompoenente ist, die ich verwendet habe, dass da eine Finalization drin ist.
|
Re: Zugriffsverletzung beim Ausführen von Halt
Dann würde ich als nächstes Haltepunkte auf die ersten Anweisungen der Finalization-Abschnitte setzen und diese dann im Einzelschritt-Modus durchlaufen - vorausgesetzt, du hast den Quelltext der Komponente(n).
Gruß Hawkeye |
Re: Zugriffsverletzung beim Ausführen von Halt
Das ist der letzte Befehl den er ausführt.
Result := CallWindowProc(IntPtr(GetWindowLong(hWnd, GWL_USERDATA)), hwnd, uMsg, wParam, lParam); Danach kommt er hier hin procedure TALCustomButton.WndProc(var Message: TMessage); begin case Message.Msg of In dem Moment, wenn ich den Begin ausführe kommt die zugriffsverletzung |
Re: Zugriffsverletzung beim Ausführen von Halt
Sorry, an der Stelle werde ich Dir wahrscheinlich nicht weiterhelfen können. :gruebel:
Du könntest versuchen die Komponente durch eine Standardkomponente zu ersetzen. Und ein letzter Versuch:
Delphi-Quellcode:
Möglicherweise ist das bei Deiner Applikation aber gar nicht umzusetzen, weil einige Formulare vielleicht nur erzeugt werden dürfen, wenn die vorigen erfolgreich initialisiert bzw. abgeschlossen wurden.var ok : Boolean; begin Application.Initialize; Application.Title := 'SoftwareTest'; Application.CreateForm(Tfrm_MDI, frm_MDI); Application.CreateForm(Tfrm_DBSetup, frm_DBSetup); Application.CreateForm(Tfrm_Setup, frm_Setup); Application.CreateForm(Tfrm_DDE, frm_DDE); ok := frm_MDI.KDRReg.CheckReg(TRUE); Application.CreateForm(Tfrm_Setup, frm_Setup); Application.CreateForm(Tfrm_Designer, frm_Designer); frm_Setup.Init; frm_DBSetup.Init; frm_MDI.Init; ok := ok and Tfrm_Login.Create(nil).Execute(vmastermode); frm_MDI.InitAfterLogin(vmastermode); if ok then Application.Run; frm_MDI.DeInit; end. Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 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