Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C++ catch (...) (https://www.delphipraxis.net/180559-catch.html)

MrSpock 29. Mai 2014 09:11

Delphi-Version: 2010

catch (...)
 
Hallo,

in der Projektdatei wird folgender Text erzeugt:

Code:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
   try                                                  
   {
      Application->Initialize();
      SetApplicationMainFormOnTaskBar(Application, true);
      Application->CreateForm(__classid(TfrmABC), &frmABC);
      Application->Run();
   }
   catch (Exception &exception)
   {
      Application->ShowException(&exception);
   }
   catch (...)
   {
      try
      {
         throw Exception("");
      }
      catch (Exception &exception)
      {
         Application->ShowException(&exception);
      }
   }
   return 0;
}
//---------------------------------------------------------------------------
Ich bin dabei über die Zeile catch (...) gestolpert.

Was bedeuten die 3 Punkte :shock:.

Sir Rufo 29. Mai 2014 09:19

AW: catch (...)
 
Wird hier erklärt :)
Zitat:

If an ellipsis (...) is used as the parameter of catch, that handler will catch any exception no matter what the type of the exception thrown.

Bernhard Geyer 29. Mai 2014 09:22

AW: catch (...)
 
Sammele alle anderen Exception ein die bisher nicht behandelt wurden.
Wäre bei Delphi Except ohne Typangabe.
Hätte zwar gedacht das auch bei C++ Exception die Basis aller Typen ist, aber bei C++ gibt ja immer überraschungen ...

MrSpock 29. Mai 2014 09:38

AW: catch (...)
 
OK, danke. Hab ich mir schon gedacht. Nur wird diese Notation in der C++ Hilfe gar nicht erwähnt. (Ich konnte sie zumindest nicht finden :? )

Robotiker 29. Mai 2014 14:02

AW: catch (...)
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1260665)
Hätte zwar gedacht das auch bei C++ Exception die Basis aller Typen ist, aber bei C++ gibt ja immer überraschungen ...

Kannst du haben
Zitat:

We can throw an exception of any type that can be copied or moved.
steht im Buch von Stroustrup. Ein
Code:
throw 42;
geht also in Ordnung.

Es gibt allerdings eine Hierarchie vordefinierter Exceptionklassen, die Basisklasse wäre da exception. Exception (großgeschrieben) ist eine C++ Builder Spezialität und eine nur dort parallel existierende Klassenhierarchie.

Bernhard Geyer 29. Mai 2014 14:20

AW: catch (...)
 
Zitat:

Zitat von Robotiker (Beitrag 1260673)
Es gibt allerdings eine Hierarchie vordefinierter Exceptionklassen, die Basisklasse wäre da exception. Exception (großgeschrieben) ist eine C++ Builder Spezialität und eine nur dort parallel existierende Klassenhierarchie.

Dann ist exception die Mutter aller (C++-Standard-)Exceptions und Exception die Mutter als VCL/RTL-Exception

Robotiker 29. Mai 2014 14:31

AW: catch (...)
 
Ja. Wenn man irgendwelchen Standard-C++ Code verwendet, könnte man vor den catch(...) Block noch einen
Code:
catch(std::exception& e)
{
  // mit e.what() kommt man an den Fehlertext
}
setzen. Je nach Bibliothek, die man verwendet, auch noch was anderes.

MrSpock 29. Mai 2014 14:45

AW: catch (...)
 
Danke für die Antworten. Noch eine Zusatzfrage zu dem Code im Try - Block.

Woher kennt die Anwendung an dieser Stelle das Objekt "Application" ?

Bernhard Geyer 29. Mai 2014 14:48

AW: catch (...)
 
Globale Variable in der Forms-Unit

MrSpock 29. Mai 2014 15:01

AW: catch (...)
 
Ah ok, und diese kommt indirekt über das include der vcl.h mit rein. :freak:


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