调用非托管DLL会导致进程无异常

时间:2015-09-29 01:52:41

标签: c# interop unmanaged

我有一个针对.Net框架4.5版的WPF C#应用程序。我的应用程序调用一个未受管理的DLL,除了一个方法之外的所有方法都正常工作。当我调用问题方法时,我的进程退出而不引发任何异常,退出代码为:1073741855 (0x4000001f)

我已经阅读了<legacyCorruptedStateExceptionsPolicy>元素并将其添加到我的app.config文件中。我在“异常设置”对话框中打开了所有异常(我正在使用VS2015,BTW)。在这一点上,我已经没有技术来确定导致进程退出的原因。

更新:我碰巧在项目设置中尝试启用启用本机代码调试,现在收到以下异常:

  

在0x77CBED0B(ntdll.dll)中抛出异常   SK.UnmanagedDLLExceptionTest.exe:0xC0000374:堆已经存在   损坏(参数:0x77CF4270)。

鉴于上述信息,您是否知道其他任何可用于将更多细节带到表面的技术?

如果您感兴趣(并且愿意),我已经创建了一个显示问题的简单的控制台应用程序download here

2 个答案:

答案 0 :(得分:2)

通过启用项目设置中的“启用本机代码调试”,我可以抛出以下异常:

  

在0x77CBED0B(ntdll.dll)中抛出异常   SK.UnmanagedDLLExceptionTest.exe:0xC0000374:堆已经存在   损坏(参数:0x77CF4270)

虽然这当然不是好消息,但它会提供更多细节并引导我走向行为不端的方向。

答案 1 :(得分:1)

如果您实际上没有抓到任何东西,那么抓住遗产标志并不会有帮助。

错误似乎解码为找不到DLL。

这是一个32位的DLL,你编译为任何CPU。如果你有x64(你可能会这样做),这就是问题所在。具体编译为x86。

如果你把catch放在那里,它仍然没有帮助,因为在方法入口(在尝试到达之前)编译了绑定。