c# - 在 C# 中处理来自非托管 dll 的异常

标签 c# dll unmanaged

我有以下用 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/

相关文章:

C# 缺少 MSVCR100.dll

c# - 帮助抽象类/类/接口(interface)单元的结构

c++ - 在非托管 C/C++ 中获取已签名 EXE 的 X509 代码签名证书序列号

c++ - 用.dll文件编译可执行文件,.dll文件相对于.exe

c++ - dll 缺少对 Windows 7 文件的依赖项

c# - 在传递给非托管代码之前将委托(delegate)固定在结构中

c# - 如何从 C 调用 C# 以传递具有数组作为成员的结构数组?

c# - 更新 exe 资源部分中的图像(在 c#/C 中)

c# - 从 VSTO 插件获取 Outlook 窗口

c# - 如何使用交易范围?