Handling exception from unmanaged dll in C#

c#, dll, unmanaged

Solution

"The CLR no longer delivers exceptions for corrupted process state to exception handlers in managed code."

.NET Framework 4 Migration Issues.

Just add this to the config file: http://msdn.microsoft.com/en-us/library/dd638517.aspx

Problem

I have the following function written in C# ``` public static string GetNominativeDeclension(string surnameNamePatronimic) { if(surnameNamePatronimic == null) throw new ArgumentNullException("surnameNamePatronimic"); IntPtr[] ptrs = null; try { ptrs = StringsToIntPtrArray(surnameNamePatronimic); int resultLen = MaxResultBufSize; int err = decGetNominativePadeg(ptrs[0], ptrs[1], ref resultLen); ThrowException(err); return IntPtrToString(ptrs, resultLen); } catch { return surnameNamePatronimic; } finally { FreeIntPtr(ptrs); } } ``` ` Function decGetNominativePadeg is in unmanaged dll ``` [DllImport("Padeg.dll", EntryPoint = "GetNominativePadeg")] private static extern Int32 decGetNominativePadeg(IntPtr surnameNamePatronimic, IntPtr result, ref Int32 resultLength); ``` ` and throws an exception: `Attempted to read or write protected memory. This is often an indication that other memory is corrupt`. The catch that is in C# code doesn't actually catch it. Why? How to handle this exception? Thank you for your help!

Original source