对非托管dll的调用在不引发异常的情况下终止进程

本文关键字:异常 情况下 进程 终止 dll 调用 | 更新日期: 2023-09-27 18:14:53

我有一个针对。net框架4.5版的WPF c#应用程序。我的应用程序正在调用非托管DLL,除了一种方法外,所有方法都工作良好。当我调用问题方法时,我的进程退出而不引发任何异常,退出代码为:1073741855 (0x4000001f)

我已经阅读了关于<legacyCorruptedStateExceptionsPolicy>元素并将其添加到我的app.config文件中。我在异常设置对话框中打开了所有异常(我使用VS2015,顺便说一句)。在这一点上,我已经用尽了技术来确定是什么导致进程退出。

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

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

鉴于上述信息,你们中有谁知道其他可以用来将更多细节带到表面的技术吗?

如果您感兴趣(并且愿意),我已经创建了一个非常简单的控制台应用程序,它显示了这个问题,请在这里下载。

对非托管dll的调用在不引发异常的情况下终止进程

通过在项目设置中打开"启用本机代码调试",我能够抛出以下异常:

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

虽然这当然不是好消息,但它确实提供了更多的细节,并引导我朝着一个行为不端的dll的方向。

如果您实际上没有捕获任何内容,则捕获遗留标记没有帮助。

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

那是一个32位的DLL,你编译为Any CPU。如果您有x64(您可能有),这就是问题所在。编译为x86。

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