AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Application beenden vor erstem Erzeugen von Form

Application beenden vor erstem Erzeugen von Form

Ein Thema von RalfSi · begonnen am 6. Jun 2012 · letzter Beitrag vom 7. Jun 2012
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.585 Beiträge
 
Delphi 12 Athens
 
#1

AW: Application beenden vor erstem Erzeugen von Form

  Alt 6. Jun 2012, 16:56
Man ruft nicht direkt Destroy auf.

Delphi-Quellcode:
Application.Free;
if not Application.Terminated the
Und jetzt rate mal, was du da machst?

Genau, du erzeugst eine Exception, da du versuchst ein Objekt (TApplication) zu nutzen, welches nicht mehr existiert und da du an dieser Stelle keine Exceptions mehr abfängst/verarbeitest, schmiert gleich die ganze Anwendung ordentlich ab.


Von Halt würde ich abraten.
Das ist so, als wenn du bei 200 km/h 'nen Anker aus'm Auto wirfst, anstatt mit angemessener Geschwindigkeit abzubremsen.



Delphi-Quellcode:
Application.Initialize;
{hier prüfe ich, ob einen Datei vorhanden ist}
if darf_starten then begin
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end;
oder notfalls
Delphi-Quellcode:
Application.Initialize;
{hier prüfe ich, ob einen Datei vorhanden ist}
if not darf_starten then
  Application.Terminate;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
Du kannst aber auch mal Delphi-Referenz durchsuchenExit probieren
Delphi-Quellcode:
Application.Initialize;
{hier prüfe ich, ob einen Datei vorhanden ist}
if not darf_starten then
  Exit;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Jun 2012 um 17:00 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Application beenden vor erstem Erzeugen von Form

  Alt 6. Jun 2012, 17:04
Gegen Halt habe ich nichts, an der richtigen Stelle. Ansonsten ist evtl. besser Application.Terminate besser.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.073 Beiträge
 
Delphi 12 Athens
 
#3

AW: Application beenden vor erstem Erzeugen von Form

  Alt 6. Jun 2012, 19:48
Gegen Halt habe ich nichts, an der richtigen Stelle. Ansonsten ist evtl. besser Application.Terminate besser.
Da es dafür (in 99,99% der Fälle) keine richtige Stelle gibt, kann ich der Aussage voll zustimmen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Application beenden vor erstem Erzeugen von Form

  Alt 6. Jun 2012, 19:58
Du solltest nicht immer so negativ denken, vielleicht fehlt dir für den Einsatz einfach nur die Phantasie.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.073 Beiträge
 
Delphi 12 Athens
 
#5

AW: Application beenden vor erstem Erzeugen von Form

  Alt 6. Jun 2012, 20:29
Du solltest nicht immer so negativ denken, vielleicht fehlt dir für den Einsatz einfach nur die Phantasie.
Naja, bei den potentiellen schwerwiegenden Nebenwirkungen für Programm und System fällt mir da in der Tat wenig ein, außer zum Debuggen bei der Entwicklung.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Application beenden vor erstem Erzeugen von Form

  Alt 6. Jun 2012, 20:34
Zum Beispiel.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.073 Beiträge
 
Delphi 12 Athens
 
#7

AW: Application beenden vor erstem Erzeugen von Form

  Alt 6. Jun 2012, 21:43
Offene Handles und von der Anwendung genutzter Speicher wird seit Windows NT/Windows 2000 von Windows automatisch freigegeben.
Vorher, bei Windows 9x, gab es das so nicht, da führte Halt ggf. auch dort zu Problemen.

Bei geladenen DLLs und Systemobjekten klappt die automatische Freigabe aber offenbar leider nicht immer, zumindest bis XP (bei Vista/7/8 habe ich noch keine solchen Probleme mehr gehabt), wenn das Programm abgeschossen wird. Das führt meistens nicht zu größeren Problemen, aber es kann auch passieren, dass man Windows irgendwann neustarten muss. Was da genau schief geht, weiß ich nicht, weil ich es mir nie genauer angeschaut habe.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
RalfSi

Registriert seit: 6. Jun 2012
9 Beiträge
 
#8

AW: Application beenden vor erstem Erzeugen von Form

  Alt 6. Jun 2012, 17:14
Application.Terminate und/bzw. Exit habe mir nichts gebracht.
Der Code nach Terminate wird dennoch ausgeführt und exit brachte Fehlermeldungen in irgendwelchen bpls.
Ich hab's nun so gemacht, dass ich die Lösung angehe:

Code:
if darf_starten then begin
   Application.CreateForm(TfrmMain, frmMain);
   Application.Run;
 end;
Dennoch bleibt mir das mit dem Terminate/Destroy unverständlich (gerade auch, weil ich das Gefühl habe, dass Application.Terminate nichts zur Folge hat, außer Fehlermeldungen).
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: Application beenden vor erstem Erzeugen von Form

  Alt 6. Jun 2012, 18:08
Was macht Application.Destroy ? Löst die Instanz und gibt den Speicher frei! Was passiert wenn du dann fragst if not Application.Terminated ? Du greifst noch mal auf das Application Objekt zu, das du gerade feigegeben hast. Klar das es da knallt.

Vielleicht an einem Beispiel verdeutlicht:

Delphi-Quellcode:
var
  StringList: TStringList;
begin
  StringList := TStringList.Create;
  StringList.Free;
  StringList.Add('Viel Spaß');
end;
Was stimmt hier nicht?
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: Application beenden vor erstem Erzeugen von Form

  Alt 6. Jun 2012, 18:15
Antwort: 'Viel Spaß' ist deplaziert. Rein emotionell.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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