2010-10-15 1 views
6

il seguente codice genera un'eccezione in C++ e prendere in C# C++Messaggio di eccezione C++ CLI leggibile in C#?

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

Quando prendo in C#, che mi dà il seguente:

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

ecco come io chiamo il codice C++

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

.... 

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

Basta chiedersi come posso ottenere il "eccezione di un C++" in C#

+1

Avete controllato l'analisi dello stack? Cosa contiene l'eccezione 'ToString()'? – Oded

+0

Come stai chiamando il tuo codice C++ da C#? Via PInvoke? –

+0

@ Matteo, ho appena modificato la domanda per chiarire – jebberwocky

risposta

4

Non ha posto la domanda correttamente. È l'eccezione C++\CLI non C++. In C++ \ CLI, effettuare le seguenti operazioni:

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

piuttosto che C++ nativo eccezione

Grazie a tutti per rispondere e commentare

2

Si consiglia di rilevare sempre eccezioni con lo stesso runtime che le ha generate.

E l'unico modo per analizzare l'eccezione è da C++, poiché il layout dell'eccezione non è definito.

2

Come spiegato da @CodeInChaos, C++ e .NET hanno runtime diversi, quindi le eccezioni non coesistono molto bene.

È possibile utilizzare C++/CLI per la parte C++? Questo unificherà il runtime e le eccezioni saranno compatibili. Si noti che è possibile avere una piccola parte del codice C++ che utilizza .NET (codice in modalità mista).

+0

C++/CLI sta usando nel mio caso. come devo lanciare correttamente la mia eccezione in C++/CLI grazie – jebberwocky

+0

rispondendo a me stesso ... http: //en.wikipedia.org/wiki/C%2B%2B/CLI – jebberwocky