【问题标题】:SEHException thrown in a non-.NET application在非 .NET 应用程序中引发 SEHException
【发布时间】:2009-12-20 22:22:06
【问题描述】:

我正在编写一个不使用 .NET 的 MFC 应用程序(CLR 支持在项目设置中设置为 No Common Language Runtime support)。但是,当我在 Release 版本中退出应用程序时,我得到了一个 SEHException。 Debug build 给了我一个断言错误,但是错误窗口在弹出后大约半秒后消失(我以前也没有遇到过)所以我没有机会查看它。

所以主要问题是:没有任何托管代码的应用程序如何抛出 Interop.SEHException?

【问题讨论】:

  • 异常是否总是发生,还是仅在您从 Visual Studio 运行时(即附加调试器时)发生?
  • 它总是发生。当我从 VS 运行它时,出现异常框。但是,当我将它作为独立应用程序运行时,会弹出一个 C 运行时错误,但同样只有一秒钟。
  • 消失的 exc。盒子很奇怪,您是否运行了一些软件可以消除某些盒子?是否可以使用推论:除一点外全部删除并逐个添加,直到再次发生错误?可能的驱动程序问题(我曾经在 Windows 驱动程序更新损坏时遇到过类似的行为)?

标签: .net c++ windows mfc


【解决方案1】:

没有托管代码的应用程序可能会引发 SEHException,因为结构化异常处理 (SEH) 是 Win32 的一部分,并且早于 CLR。这是来自January 1997 giving a crash course (hah!) on Win32 SEH 的链接。

【讨论】:

    【解决方案2】:

    啊,修好了。问题是我从两个单独的线程调用了我的退出代码(包括对PostQuitMessage() 的调用)两次。消失的框是由于在抛出异常后不久exit(0) 被调用并且程序终止。

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 2021-11-06
      相关资源
      最近更新 更多