我有以下用 C# 编写的函数
public static string GetNominativeDeclension(string surnameNamePatronimic)
{
if(surnameNamePatronimic == null)
throw new ArgumentNullException("surnameNamePatronimic");<p></p>
<pre><code>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);
}
</code></pre>
<p>}
</p>
函数 decGetNominativePadeg 在非托管 dll 中
[DllImport("Padeg.dll", EntryPoint = "GetNominativePadeg")]
private static extern Int32 decGetNominativePadeg(IntPtr surnameNamePatronimic,
IntPtr result, ref Int32 resultLength);
并抛出异常:
试图读取或写入 protected 内存。这通常表示其他内存已损坏
。
C# 代码中的捕获实际上并没有捕获它。为什么?如何处理这个异常?
感谢您的帮助!
最佳答案
“CLR 不再将损坏的进程状态的异常传递给托管代码中的异常处理程序。”
.NET Framework 4 Migration Issues .
只需将其添加到配置文件中: http://msdn.microsoft.com/en-us/library/dd638517.aspx
关于c# - 在 C# 中处理来自非托管 dll 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2854942/