2

我一直在为应用程序开发 C# 和 WPF 插件。

它一直运行良好,直到在 Win7 机器上启动。症状是 Microsoft .NET Framwork 的“未处理异常”对话框在System.ArithmeticException (算术运算中的溢出或下溢)启动时弹出,并提供指向System.Windows.Controls.Primitives.Track.ComputeScrollBarLengths (...)和更深的堆栈跟踪。

于是,我开始调试应用程序:它显示调用 user32.dll 的 setParent 时抛出了 System.ArithmeticException。这是在应用程序调用显示附加 UI 时完成的。

public bool ShowUI(int Parent)
{
userControl = new MyUserControl(); // Extends System.Windows.Forms.UserControl
SetParent(userControl.Handle, new IntPtr(Parent)); // <- exception thrown here
...
}

什么可能导致这个问题?

4

1 回答 1

0

我在这里添加解决方案,以防有人发现它有用。

正如 Hans Passant 的评论中所提到的,非托管代码中的某些内容(尽管仅在 64 位版本中)导致浮点操作导致导致此错误的异常。解决方案类似于此答案:https ://stackoverflow.com/a/19722292/8063451

在我的插件初始化时添加_fpreset()函数调用解决了这个问题。

    [DllImport("msvcr.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern int _fpreset();

    public static void Run()
    {
       // Other code
        _fpreset(); // Reinitialises the floating-point package
    }
于 2018-02-11T08:12:48.620 回答