Utilizzo una DLL non gestita con una funzione che genera std::exception
.Eccezione di dll non gestita in .NET
Utilizzo un wrapper .NET DLL in modo che possa essere distribuito per l'utilizzo nei programmi .NET.
Mi piacerebbe essere in grado cattura il messaggio dell'eccezione nativo, ma tutto quello che sto ricevendo è System.Runtime.InteropServices.SEHException("External component has thrown an exception.")
Esiste un modo per propagare i dettagli di eccezione? Forse dovrei esportare un'eccezione personalizzata dalla DLL nativa? Come lo farei?
Grazie
DLL nativa:
__declspec(dllexport) void __stdcall W32DLLFunc(int param) {
if (param < 0) {
throw new exception("Error: param must be > 0");
}
...
}
.net DLL:
[DllImport("nw32.dll", CharSet = CharSet::Auto)]
static void W32DLLFunc(int param);
programma vb.net:
Try
W32DLLFunc(-1)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
È vero, la famosa eccezione "E msc'. Cancellerò i miei commenti in cambio di un upvote.È ancora possibile aggiungere una nota sulla scrittura di un wrapper C++/CLI per tradurre eccezioni C++ in eccezioni .NET, che sembra essere la soluzione più pulita. L'assembly in modalità mista può essere utilizzato anche dal codice nativo e gestito. – IInspectable
Cheers. Mi era venuto in mente un wrapper C++/CLI, ma non sapevo a priori in che modo le eccezioni native interagissero con C++/CLR. [Questo articolo] (http://msdn.microsoft.com/en-us/library/df24ysb6.aspx) implica quasi che funzioni, quindi ho provato e funziona. Ho aggiornato la mia risposta. – arx