Ausnahmen in .net



  • Hallo,

    kann mir jemand sagen, wie ich eine Ausnahme einer beliebigen .net Methode behandle?

    Normale Rückgabewerte gibt es ja nicht und die Ausnahme werfe ich ja nicht selbst, sondern sie wird ja von einer .net Methode (oder einem Konstruktor) geworfen.

    Konkretes Problem ist:

    CultureInfo^ ci = gcnew CultureInfo("de-DE");
    

    Diese Methode wird wohl eine Ausnahme zurückliefern, wenn z.B. die entsprechende Satellitenassembly nicht vorhanden ist, aber ich bekomme mittels try/catch einfach keine kompilierbare Lösung hin.

    Im Netz finde ich nur die Beschreibungen für die try/catch (mit throw) Geschichten.
    Aber ich brauche doch hier kein Catch, oder?
    Falls ich dort ein catch brauche, worauf muss ich dann prüfen?

    Hoffentlich kann mir hier jemand ein kurzes Muster zur Erklärung geben.

    Vielen Dank



  • Neu schrieb:

    CultureInfo^ ci = gcnew CultureInfo("de-DE");
    

    Diese Methode wird wohl eine Ausnahme zurückliefern, wenn z.B. die entsprechende Satellitenassembly nicht vorhanden ist,

    Diese Zeile hat doch kein bisschen mit *Satellitenassemblies* zu tun! Es wird hier nur versucht ein Culture-Objekt anzulegen. Dies geht nur schief, wenn Dein OS diese Culture nicht unterstützt.

    Neu schrieb:

    aber ich bekomme mittels try/catch einfach keine kompilierbare Lösung hin.

    Folgendes geht bei mir Problemlos:

    try
      {
        System::Globalization::CultureInfo ^ci = gcnew  System::Globalization::CultureInfo("ab-de");
      }
      catch(System::Exception ^e)
      {
        Console::WriteLine(e);
      }
    


  • Natürlich hat das nichts mit den Assemblies zu tun - die laufen jedoch und ich habe eben nur das Problem, dass ich testen will, ob die entsprechende dll anwesend ist (natürlich mit GetString).

    Obigen Code habe ich (auch in Variationen) bei mir schon versucht. Es kommen diese Fehlermeldungen und ich verstehe nicht, warum:

    .\Lokalisierung.cpp(83) : error C2317: 'try' block starting on line '81' has no catch handlers
    .\Lokalisierung.cpp(84) : error C2318: no try block associated with this catch handler
    .\Lokalisierung.cpp(86) : error C2065: 'e' : undeclared identifier



  • Aaaargh - Kommando zurück 🙂

    Ich hatte nach dem try Block immer noch ein Semikolon. Hätte nicht gedacht, dass das solch einen Fehler verusracht.

    Dann hätte es auch so funktioniert. Dennoch vielen Dank für die schnelle Antwort, denn auf das Semikolon wäre ich so nicht gekommen, wenn mir dieses Beispiel nicht gezeigt worden wäre 🙂

    Danke 🙂


Anmelden zum Antworten