AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Try Finally End verlassen bzw. abbrechen

Try Finally End verlassen bzw. abbrechen

Ein Thema von Schwedenbitter · begonnen am 30. Mai 2014 · letzter Beitrag vom 31. Mai 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Try Finally End verlassen bzw. abbrechen

  Alt 30. Mai 2014, 12:20
Wichtig zu wissen ist ...
Und das ist auch richtig so.

Exit ist zum Verlassen da,
aber nachfolgende umgebende Finally-Blöcke werden dennoch ordnungsgemäß abgearbeitet, denn dafür sind die ja da.


Nutzloses Wissen:
Wenn Exit in einer einfachen Prodedur aufgerufen wird, dann ist das ein quasi Goto zum Ende der Prozedur.
Innerhalb von Try-Finally/Except, auch impliziten Try-Finally vom Delphi, welche z.B. zum Aufräumen von lokalen String-Variablen und Interfaces eingebaut wird, wird das Exit als stille Exception implementiert, welche allerdigns von Except-Blöcken automatisch "ignoriert" wird.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (30. Mai 2014 um 12:25 Uhr)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Try Finally End verlassen bzw. abbrechen

  Alt 30. Mai 2014, 13:01
Nutzloses Wissen:
Wenn Exit in einer einfachen Prodedur aufgerufen wird, dann ist das ein quasi Goto zum Ende der Prozedur.
Innerhalb von Try-Finally/Except, auch impliziten Try-Finally vom Delphi, welche z.B. zum Aufräumen von lokalen String-Variablen und Interfaces eingebaut wird, wird das Exit als stille Exception implementiert, welche allerdigns von Except-Blöcken automatisch "ignoriert" wird.
Wieso nutzlos? Das ist genau die Antwort, die ich gesucht habe. Tausend Dank dafür.

Ich schreibe übrigens auch nicht sinnlos in "C:\$space" rum.
Das Programm ist eine Kreation ausschließlich für mich. Es erzeugt mehrere Dateien und trägt diese in C:\Windows\Prefetch\Layout.ini ein. Ein anschließendes Defragmentieren schiebt sie dann an den Anfang der Platte, so dass ich dort später dann pagefile.sys platzieren kann. Im Moment mache ich das von Hand; und das nervt sehr.
Es ist quick und dirty. Allerdings für viele Rechner und ich muss sehen, wann Fehler passieren und welche Fehler das sind. Das macht mehr Arbeit als das, was das Programm eigentlich machen soll.

So. Und jetzt muss ich bloß noch suchen, wie ich Windows oder dem Programm beibringe, dass beim Start gleich die Abfrage nach Admin-Rechten kommt für Schreibrechte in "C:\Windows\Prefetch". Aber das bekomme ich auch bald raus.

Wie gesagt: tausend Dank. Alex

P.S. Wo muss ich jetzt vermerken, dass die eigentliche Frage des Themas gelöst ist?
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Try Finally End verlassen bzw. abbrechen

  Alt 30. Mai 2014, 14:22
zum PS: Einfach schweigen reicht ...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Try Finally End verlassen bzw. abbrechen

  Alt 30. Mai 2014, 14:24
zum PS: Einfach schweigen reicht ...
Besser ist aber auf jeden Fall eine Rückmeldung.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Try Finally End verlassen bzw. abbrechen

  Alt 30. Mai 2014, 14:28
Ich habe das missverständlich formuliert.
Verbale Rückmeldung und Ruhen lassen des Threads reicht aus. Ein Erledigt-Flag oder Abschließen des Threads ist nicht notwending.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Try Finally End verlassen bzw. abbrechen

  Alt 30. Mai 2014, 14:35
Ein Manifest welches ensprechende (Admin)Rechte anfordert,
oder ein externer Aufruf z.B. über Runas, oder über Eigenschaften von Verknüpfungen (lnk), oder der zugeordnete Benutzerkonto eines Services usw.


Wenn man das unbedingt markieren will, dann kann man beim Erstellen einer Frage diese als "offen" markieren und das später wieder weg machen,
oder schreibt einfach, daß und eventuell welche Lösung man genommen hat.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Try Finally End verlassen bzw. abbrechen

  Alt 31. Mai 2014, 08:27
Ich würde das so lösen:
Delphi-Quellcode:
Procedure TForm1.BtnStartClick(Sender: TObject);
Const
   DummySpace ='C:\$space';

   Procedure _DemandDirectoryCreated(string aDirectory);
   Begin
      CreateDir(aDirectory);
      if Not DirectoryExists(aDirectory) Then
         Abort;
   end;

Begin
   BtnStart.Enabled:=False;
   MELog.Lines.Clear;
   Try
      MELog.Lines.Append('Step 1: Allocating Memory');
      MELog.Lines.Append('- creating directory "' + DummySpace + '"');

      _DemandDirectoryCreated(DummySpace);
      
     MELog.Lines.Append(' success...');
      // Hier nur weiter, wenn Verzeichnis angelegt wurde/existiert

   Except
      MELog.Lines.Append(' Could not create "' + DummySpace + '".');
      MELog.Lines.Append(' Error was: "' + SysErrorMessage(GetLastError) + '"');
      MELog.Lines.Append(' Opreation aborted.');
   End;
   BtnStart.Enabled:=True;
End;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Try Finally End verlassen bzw. abbrechen

  Alt 31. Mai 2014, 08:35
@Dejan Vu

Das kann evtl. funktionieren, allerdings muss der Aufruf von GetLastError direkt im Anschluss der Funktion aufgerufen werden, wo dieser Fehler (hier CreateDir ) aufgetreten ist.

Ansonsten ist nicht gewährleistet, dass man auch wirklich die Fehlermeldung bekommt, die man eigentlich haben möchte.

EDIT
Eigentlich arbeitet GetLastError nur dann zuverlässig, wenn man gesichert direkt vorher eine Windows-Funktion aufgerufen hat.

Bei Delphi-Referenz durchsuchenSysUtils.CreateDir kann man sich da aber nicht wirklich sicher sein ...

Delphi-Quellcode:
type
  // Wenn ein Arbeitsschritt fehlschlägt, dann diese Exception werfen
  EStepException = class(Exception);

procedure TForm1.BtnStartClick( Sender : TObject );
begin
  BtnStart.Enabled := False;
  try
    try

      MELog.Lines.Append('Step 1: Allocating Memory');
      MELog.Lines.Append('- creating directory "' + DummySpace + '"');

      if ForceDirectories( DummySpace )
      then
        MELog.Lines.Append( ' success' )
      else
        raise EStepException.CreateFmt( 'Could not create "%s"', [DummySpace] );

      // nächste Schritte

    except
      on E: EStepException do
        begin
          MELog.Lines.Append( E.Message );
          MELog.Lines.Append( 'Operation aborted.' );
          raise;
        end;
    end;
  finally
    BtnStart.Enabled := True;
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (31. Mai 2014 um 09:02 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

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 00:05 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