Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Absturz trotz try/finally (https://www.delphipraxis.net/23012-absturz-trotz-try-finally.html)

MathiasSimmack 27. Mai 2004 14:46


Absturz trotz try/finally
 
Ich bin kurz vor dem Verzweifeln. Was ist bei einem VCL-Programm anders als bei einem nonVCL/Konsolenprogramm? Ich habe hier in etwa folgenden Code:
Delphi-Quellcode:
rs := Interface.Create;
if(rs <> nil) then
try
  try
    rs.Connect;
  except
    rs := nil;
  end;

  if(rs <> nil) then
  try
    filter := rs.GetFilterInterface;

    if(filter <> nil) then
    try
      filter.Create('Filter','');
    except
      // do nothing
    end;
  finally
    rs.CloseConnection;
  end;
finally
  rs := nil;
end;
Es ist nur Pseudo-Code, sorry. Aber grundlegend sieht er so aus.


Wenn ich den Code jetzt in einem VCL-Programm starte (besser gesagt: wenn ich das kompilierte VCL-Programm starte), dann legt er den Filter mit dem leeren Inhalt an, schließt die Verbindung, und fertig. Mache ich das jetzt in einen nonVCL/Konsolenprogramm, dann erhalte ich eine Zugriffsverletzung, und die Verbindung wird nicht richtig geschlossen. Trotzdem wird der Filter angelegt, nur dass (im Gegensatz zum VCL-Programm) diese Zugriffsverletzung erscheint. Ist der Filter nicht leer, also
Delphi-Quellcode:
      filter.Create('Filter','Testinhalt');
dann geht es auf einmal.


Kennt jemand den Grund dafür?
Ich muss zugeben, ich habe keine Ahnung. :(

Phoenix 27. Mai 2004 14:51

Re: Absturz trotz try/finally
 
Jupp.

Die VCL hat ein eigenes Exception-Handling, und sauber abgefangene Exceptions werden nicht durchgereicht.

Bei nonVCL fehlt das ganze Zeugs (ist irgendwo in Application drin).

MathiasSimmack 27. Mai 2004 16:08

Re: Absturz trotz try/finally
 
Die "SysUtils.pas" hat gereicht. ;) Aber dennoch, ein guter Tipp. Jetzt die obligatorische Frage: Wie kann ich auf die SysUtils-Unit verzichten (um das Programm klein zu halten) und trotzdem die genannte Exception abfangen ... bzw. abgefangen wird sie ja eigentlich schon, nur löst sie eben noch die Meldung aus.

Ein bisschen Lektüre zum Thema täte es auch schon.

Ratte 30. Mai 2004 20:57

Re: Absturz trotz try/finally
 
@MathiasSimmack: Kopier' dir die entsprechenden Teile aus der Sysutils.pas und füge sie bei dir ein.

Ratte

generic 1. Jun 2004 11:50

Re: Absturz trotz try/finally
 
mit try finally unterdrückst du keine exceptions.
es wird nur zusaetzlich der finally block ausgefuehrt.
nach dem block wird die exception behandelt.
d.h. der code wird abgebrochen und in den exceptionhandler der appliction gesprungen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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