Читаемое сообщение об исключении C++CLI в C#?

следующий код создает исключение в C++ и catch в C# C++

 throw std::exception ("a C++ exception");

когда я ловлю в C#, он дает мне следующее:

[SEHException (0x80004005): External component has thrown an exception.]

вот как я называю код C++

using Foo.Bar.Sample; //C++ library

....

Class1 class1 = new Class1(); //C++ class
class1.throwAnException();

просто интересно, как я могу получить "исключение C++" в C#

3 ответов


неправильно задал вопрос. Это C++\CLI не C++ исключения. В C++\CLI выполните следующие действия:

 throw gcnew System::Exception("It is a C++\CLI exception");

а не собственное исключение c++

спасибо всем за ответы и комментарии


Я бы рекомендовал вам всегда ловить исключения с той же средой выполнения, которая их бросила.

и единственный способ проанализировать исключение-из C++, так как макет исключения не определен.


Как объяснил @CodeInChaos, C++ и .NET имеют разное время выполнения, поэтому исключения не очень хорошо сосуществуют.

можете ли вы использовать C++ / CLI для части c++? Это позволит унифицировать среду выполнения, и исключения будут совместимы. Обратите внимание, что вы можете иметь небольшую часть кода C++, который использует .NET (код смешанного режима).