SEHE.Net中的异常

本文关键字:异常 Net SEHE | 更新日期: 2023-09-27 17:53:12

设置:

  • 用C编写的.Net DLL#
  • C++/CLI Wrapper Dll调用.Net Dll
  • VS2013,Windows7 32位,.Net 4.5.2

将大于2^31-1的值分配给.Net DLL中的双精度将导致SEHException,使用较小的值一切正常。

public void Foo()
{
    double foo = 2147483648d;
        ...
}

当从C++/CLI调用时,确实抛出SEHexception,而

public void Foo()
{
    double foo = 2147483647d;
        ...
}

没有。你知道为什么会发生这种情况以及如何避免这种例外吗?

SEHE.Net中的异常

DLL是从一个改变FPU控制世界的应用程序中调用的。设置

_control87(_CW_DEFAULT, MCW_EM);

在调用托管DLL之前,在C++/CLI Wrapper DLL中执行此操作是一个快速修复方法。