Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriffsverletzung beim Ausführen von Halt (https://www.delphipraxis.net/67851-zugriffsverletzung-beim-ausfuehren-von-halt.html)

backdraft 20. Apr 2006 19:56


Zugriffsverletzung beim Ausführen von Halt
 
Hallo zusammen,

ich habe ein mittlerweile ziemlich grosses Projekt.
Das Hauptmodul sieht folgendermaßen aus:

Delphi-Quellcode:
  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;
Das Programm läuft im normalfall ganz normal ohne Fehler, es wird auch ohne Fehler beendet.
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

mirage228 20. Apr 2006 20:40

Re: Zugriffsverletzung beim Ausführen von Halt
 
Hi,

was ist, wenn Du die letzten 4 Zeilen so abänderst:
Delphi-Quellcode:
if Tfrm_Login.Create(nil).Execute(vmastermode) then
begin
  frm_MDI.InitAfterLogin(vmastermode);
  Application.Run;
  frm_MDI.DeInit;
end;
Dann müsste sich das Programm theoretisch einfach normal beenden, falls das Login falsch ist.

mfG
mirage228

backdraft 20. Apr 2006 20:46

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.

Hawkeye219 20. Apr 2006 20:55

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

Corpsman 20. Apr 2006 20:59

Re: Zugriffsverletzung beim Ausführen von Halt
 
Da gibts doch auch noch den Application.terminate; Befehl vielleicht hilft der ja weiter.

Hawkeye219 20. Apr 2006 21:04

Re: Zugriffsverletzung beim Ausführen von Halt
 
@Corpsman
Zitat:

Zitat von backdraft
Ein Application.Terminate bringt nicht den gewünschten erfolg, da dann das Programm auf jedenfall durchstartet, und danach erst abbricht (fehlerfrei).

Gruß Hawkeye

backdraft 20. Apr 2006 22:23

Re: Zugriffsverletzung beim Ausführen von Halt
 
Ich denke, dass es irgendeine Kompoenente ist, die ich verwendet habe, dass da eine Finalization drin ist.

Hawkeye219 20. Apr 2006 22:32

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

backdraft 20. Apr 2006 22:38

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

Hawkeye219 20. Apr 2006 23:03

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:

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.
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.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 Uhr.
Seite 1 von 2  1 2      

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