C++ Exception to C#



  • Morgen

    hab folgendes Problem. Ich habe eine C# Application die über RPC Funktionen mit einem Server(C++) bestimmte Daten holt/austauscht. Nun kann es sein das der Server (C++)Exception wirft.

    Wie kann ich diese Exception mit all ihren Informationen fangen.
    Zur Zeit mach ich das noch so, bekomme aber als Nachricht nur "Eine externe Komponente hat eine Ausnahme ausgelöst."

    try
    {
    // Irgendeine Funktion die eine Exception wirft
    }
    catch( System.Exception ex )
    {
    Console.WriteLine(  "Exception: {0}.\n", ex.Message);
    }
    

    gibt es da eine möglichkeit diese Exceptions zu fangen????



  • du kannst ja nach dem prinzip von errno eine globale variable definieren, in der die exception-informationen gespeichert werden und von c abrufbar sind. Aber fangen kannst du in c nicht, weil der try-catch bzw throw mechanismus syntaktisch in c kein äquivalent hat.



  • hmmm

    schade eigendlich das Microsoft an sowas scheinbar net gedacht hat 😞 .

    Naja kann mal halt nichts machen.

    trotzdem danke



  • Ich glaube auf die Antwort von randa kannst du verzichten. Der erzählt doch irgendwas von C, bei dir gehts aber um C++.



  • .... schrieb:

    Ich glaube auf die Antwort von randa kannst du verzichten. Der erzählt doch irgendwas von C, bei dir gehts aber um C++.

    biete was besseres an wenn du so schlau bist.
    Soweit ich das verstanden hab will er von c aus eine c++ exception fangen.



  • Er will aus C# (C Sharp) eine C++ Exception fangen.



  • Managed C++?



  • .... schrieb:

    Er will aus C# (C Sharp) eine C++ Exception fangen.

    Gibt es denn in C# eine syntax, die c++ exceptions auffängt? Exceptions sind ja schließlich sowas wie eine andere Kontrollstruktur.
    Wenn nein, dann war mein post nicht sinnlos, ob nun C# oder C.
    Ansonsten sollte optimizer spezifizieren was er meint.



  • randa schrieb:

    Wenn nein, dann war mein post nicht sinnlos, ob nun C# oder C.

    Dein Post war sinnlos. Meine Frage war allerdings an De_Bert gerichtet, ob er jetzt managed C++ verwendet oder nicht.



  • Optimizer schrieb:

    Dein Post war sinnlos.

    Und warum? Wenn ich unrecht hatte, korrigier mich.
    Ansonsten biete lieber ne kluge lösung, anstatt drauf rumzureiten wie sinnlos mein post war.



  • 1. Exceptions sind nicht so etwas wie eine Art Kontrollstruktur
    2. Dein Vorschlag mit der globalen Variable ist wohl kaum akzeptabel
    3. Selbstverständlich gibt es in C# einen Exception-Mechanismus. Ich weiss auch gar nicht, wie du in diesem Unterforum überhaupt auf C kommst, es ist weder C#, noch ist es überhaupt eine .Net Sprache.
    Außerdem, wo reite ich darauf herum? Ich habe von Anfang an gar nicht mit dir gesprochen. :p

    Ansonsten biete lieber ne kluge lösung, anstatt drauf rumzureiten wie sinnlos mein post war.

    Ich hab ja ne Frage gestellt, aber wenn ich keine Antwort kriege, ist das auch nicht wirklich mein Problem.



  • Optimizer schrieb:

    1. Exceptions sind nicht so etwas wie eine Art Kontrollstruktur

    Doch, denn von einem throw aus springt man zum nächsten catch, welches auch zu einer übergeordneten Schachtelung gehören kann. Ich habe nicht gesagt dass exceptions eine Kontrollstruktur sind, und ich habe auch nicht von exceptions geredet, sondern ich meinte das die try-throw-catch syntax eine kontrollstruktur darstellt bzw. der exception-mechanismus eine veränderte kontrollstruktur impliziert.

    lassen wirs einfach.



  • huuuiiii

    hatte garnet mehr damit gerechnet das noch soviele Messages kommen. 😃

    Auf die Frage von "Optimizer": Nein ich verwende kein managed C++ sondern managed C#.

    Vom Prinzip müssten ja Exception in jeder Sprache gleich bzw. ähnlich aufgebau sein. Ich habe schon nach Methoden gesucht die die Exception Marshalen aber auch das war Ergebnis los 😞



  • Also IMHO kannst du keine Exceptions zwischen managed und unmanaged behandeln. Sprich: Alle unmanaged Exceptions musst du auch in deinen unmanaged Code fangen.



  • huhuhu

    Optimizer schrieb:

    Also IMHO kannst du keine Exceptions zwischen managed und unmanaged behandeln. Sprich: Alle unmanaged Exceptions musst du auch in deinen unmanaged Code fangen.

    nene also da muss ich dir wiedersprechen. Unmanaged C++ Exception kannst du auch in managed C# fangen. Das einzige Problem das vorhanden ist, das es nicht wirklich "möglich" ist eine eigene Klasse zu fangen die man in unmanaged C++ geworfen hat.

    Das bedeutet das du als Exceptiontext, in managed C#, nur "Eine externe Komponente hat eine exception ausgelöst." bekommst.



  • Ist nen bisschen offtopic aber ihr schreibt hier managed C#, gibts denn auch nen unmanaged C#?



  • Jain. Es gibt unsafe Code, der ist aber nicht "veryfiable" wie der 64Bit-Mensch von Microsoft bei nem Seminar gesagt hat.
    Da gibts dann auch den ganzen Dreck wie Pointerarithmetik und manueller Speicherverwaltung.



  • Wieso dein jain? Sag doch gleich nein 🙂



  • Wär aber falsch. Der "unsafe Code" ist faktisch unmanaged.


Anmelden zum Antworten