Bonjour,
Pour l'instant la seule méthode que j'ai trouvé pour récupérer mes exceptions stl natives c'est de les catcher en c++/cli et de lancer une nouvelle exception .net .
1ère méthode que j'ai implémenté : appeler le std::exception::what() pour récupérer le message et le mettre dans une System::Exception
Exemple :
Autre solution, qui pour l'instant revient au même : j'ai crée une nouvelle classe managée ma_lib::managed_std_exeption dérivant de System::Exception, dont un constructeur prend un std::exception en paramètre. L'utilisation donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 try { //Mon truc qui lance une std::exception } catch(const std::exception & ex) { throw gcnew System::Exception(gcnew System::String(ex.what())); }
Pour l'instant, il n'y a pas d'intérêt à faire l'un plutôt que l'autre, les deux fonctionnent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 try { //Mon truc qui lance une std::exception } catch(const std::exception & ex) { throw gcnew ma_lib::managed_std_exeption(ex); }
(En attendant, je ne cherche pas à faire mieux qu'une exception qui contient un message.)
Je suis dans un cadre ou un projet C# appelle du code C++ natif en passant par du managé. Je veux que les exceptions natives soient transformée en exceptions managées.
La première solution est d'encadrer dans mes classes managées tous les appels natifs par un try catch qui relance une exception .net
Mais si il y avait une possibilité de faire un opérateur de cast qui m'évite ça, ça serait super cool. Une idée ?
S.
Partager