Używam niezarządzanego DLL z funkcją, która rzuca std::exception
.Złap niezarządzanego dll wyjątku w .NET
Używam wrapper .NET DLL, aby można go było rozpowszechniać w programach .NET.
Chciałbym móc złapać się komunikat z natywnym wyjątkiem ale jestem coraz to System.Runtime.InteropServices.SEHException("External component has thrown an exception.")
Czy istnieje jakiś sposób, aby propagować szczegóły wyjątek? Może powinienem wyeksportować niestandardowy wyjątek z macierzystej biblioteki DLL? Jak to zrobić?
Dzięki
rodzimy DLL:
__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);
Program vb.net:
Try
W32DLLFunc(-1)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
To prawda, słynny wyjątek "E msc". Usuwam moje komentarze w zamian za przegłosowanie.Nadal można dodać notatkę o pisaniu wrappera C++/CLI do tłumaczenia wyjątków C++ do wyjątków .NET, który wydaje się być najczystszym rozwiązaniem. Zestaw złożony w trybie mieszanym może być używany zarówno przez kod rodzimy, jak i zarządzany. – IInspectable
Pozdrawiam. Pojawiło się opakowanie C++/CLI, ale nie wiedziałem od razu jak natywne wyjątki współdziałają z C++/CLR. [Ten artykuł] (http://msdn.microsoft.com/en-us/library/df24ysb6.aspx) prawie sugeruje, że to zadziała, więc dałem mu wolną rękę i tak jest. Zaktualizowałem swoją odpowiedź. – arx