C# - cc3260mt.dll 每当我加载它时都会抛出 ArithmeticException

2024-02-29

我有一个 WPF 应用程序,我必须加载 DLLcc3260mt.dll我通过使用 LoadLibrary() 来调用它,但无论出于何种原因,我都收到了 ArithmeticException。

我的代码如下:

public partial class MainWindow : Window
{
    [DllImport("kernel32.dll")]
    static extern IntPtr LoadLibrary(string dllToLoad);
    [DllImport("kernel32.dll")]
    static extern IntPtr FreeLibrary(IntPtr hModule);

    public MainWindow()
    {
        InitializeComponent();

        try
        {
            string cc3260mtPath = "dll/cc3260mt.dll";
            IntPtr cc3260Link = LoadLibrary(cc3260mtPath);
        }
        catch (Exception ex)
        {
            Console.WriteLine("ERROR : " + ex.Message);
        }

    } // <-- This is where I get the Exception.
}

当我逐步运行代码时,我可以清楚地看到当我退出 MainWindow() 类时出现异常。
你们知道是什么让我这个例外吗?


那是旧的 Borland C 或 C++ 程序的 C 运行时支持库。是的,它做了一些事情very一般而言,与 .NET 代码(尤其是 WPF)不兼容,它会重新编程浮点单元控制寄存器。它启用硬件异常,在浮点运算失败时触发。在 WPF 中尤其有问题,因为喜欢大量使用 Double.NaN。它会生成 FPU 异常,CLR 会拦截它并将其重新引发为 ArithmeticException。

您必须撤消该 DLL 所做的操作并恢复 FPU 控制字。这是有问题的,.NET 不允许您直接访问这样的硬件。不过,您可以使用一个技巧,即 CLR 在处理异常时自动重新编程 FPU。所以你可以故意地生成异常并捕获它。像这样:

    IntPtr cc3260Link = LoadLibrary(cc3260mtPath);
    try { throw new Exception("Ignore this please, resetting the FPU"); }
    catch (Exception ex) {}

请注意这样做的结果,您现在将运行本机代码,而不会出现它通常依赖的异常。也许这会起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - cc3260mt.dll 每当我加载它时都会抛出 ArithmeticException 的相关文章

随机推荐

  • C++:从模板参数生成字符串文字

    template lt unsigned int i gt struct t static const char s template lt unsigned int i gt const char t i s where 是 0 1 2
  • 将函数定义为 x,y 数据的插值

    我在 data txt 中有 2 列 x y 数据 如下所示 0 0 1 1 2 4 3 9 4 16 5 25 现在我想定义一个函数 f x 其中 x 是第一列 f x 是第二列 然后能够打印该函数的值 如下所示 f 2 这应该给我 4
  • 为什么 isnumeric 不起作用?

    我正在阅读一个非常简单的 python3 指南来使用字符串操作 然后我遇到了这个奇怪的错误 In 4 create string string Let s test this test to see if it is numeric str
  • 删除 C++ 向量中的重复条目

    只是想删除重复项 泳池是vector
  • 如何配置 Visual Studio Code 来解析 AWS Lambda 层的输入路径 (javascript)

    我使用 VS Code 开发 AWS 托管的无服务器应用程序 该应用程序使用 Lambda 最近 我决定开始使用 Lambda Layers 来提取和重用公共代码 我遇到的问题是 AWS Lambda 需要 Lambda 层的以下导入 co
  • PHP MySQL PDO TextArea 带条件检查的Where 子句

    我有一个页面 如下面的屏幕截图所示 这个想法是输入公共汽车号码和特定路线上的所有站点列表 每条线路一个 站点已存储在名为 stops 的数据库表中 我需要文本区域中每个站点的 ID 我当前的代码仅获取文本区域中最后一站的 ID 我觉得我失去
  • 在 MVC 5 中填充 DropDownList

    这是我的代码添加新产品视图模型 using AccessorizeForLess Data using System Collections Generic using System ComponentModel DataAnnotatio
  • numpy datetime64 添加或减去日期间隔

    我正在解析一个巨大的 ascii 文件 其中包含分配给条目的日期 因此 我发现自己使用 datetime 包与 numpy datetime64 并行来添加数组功能 我知道 pandas 包可能是最推荐用于约会的 但是尝试在没有 panda
  • 如何使用 golang 从 Amazon S3 存储桶的子文件夹中获取对象列表?

    如何使用 golang 从 Amazon S3 存储桶的子文件夹中获取对象列表 I tried svc s3 New session New aws Config Region aws String us east 1 params s3
  • 应用内恢复在 Debug 上运行良好,但在 iPhone sdk 中的 AdHoc 上崩溃

    当我单击 恢复 按钮 AdHoc 版本 时 我的应用程序崩溃了 但同一应用程序在调试模式下工作正常 我的代码 SKPaymentQueue defaultQueue restoreCompletedTransactions 崩溃报告 Nov
  • 从 Android 向 PLC 发送布尔值

    我能够与 PLC 建立连接以从中读取数据 现在有一个问题 那就是我必须编写一种方法来修改PLC中的数据 为了实现这一点 我必须向 PLC 发送两个值 一个 int 值和一个 boolean 值 我通过 net wimpi modbus 包中
  • Mp4 视频旋转元数据

    我开发了一个 android ios 视频共享应用程序 可以录制视频并将其上传到亚马逊 s3 为了兼容 android ios 以 mp4 格式录制 H264 AAC 编解码器 用户可以拍摄肖像或风景 应用程序从传感器获取信息 设置文件的旋
  • 无效的规格缓存文件

    我在 Windows 8 上安装了 ruby 2 0 0p247 x64 mingw32 和 Gem 2 2 2 我有一个持续存在的问题 gem 导致它几乎无法使用 每当我尝试安装新的 gem 时 我总是会得到 ERROR While ex
  • Python如何将数据帧的两列组合成一个列表?

    我有一个数据框 如下所示 df index data1 data2 0 20 120 1 30 456 2 40 34 如何将上面 df 中的两列组合成一个列表 使得第一行元素先出现 然后是第二行 我的预期输出 my list 20 120
  • Laravel 5.2:Flash 没有定义的提示路径

    我试图在安装 laracasts flash 1 3 包后创建一个视图 这是我的代码 include gazett errors 在blade php文件的 gazett errors 中找到以下代码 div class row div c
  • Visual C++ 函数突然变慢 170 毫秒(长 4 倍)

    在过去的几个月里 我一直致力于一个 Visual C 项目 从相机中获取图像并进行处理 到目前为止 更新数据大约需要 65 毫秒 但现在突然显着增加 发生的情况是 我启动程序 在前 30 次左右的迭代中 它按预期执行 然后循环时间突然从 6
  • 使用 Azure Durable Functions 实现“即发即忘”后台作业

    我有一个用例 要求我启动一些 Azure Durable Functions 而不关心其结果 我想知道我的方法是否正确 这是我所处的场景 功能A使用一个HttpTrigger 功能B使用一个ActivityTrigger 这是我的工作流程
  • PHP中如何对多个数组进行排序

    我已经编写了一个脚本来生成数据数组 但现在想按分数顺序显示 数组输出如下 display name gt Array 0 gt ACT Web Designs 1 gt user1 design 2 gt user2 design prof
  • 使用 Mongo C# 驱动程序序列化不可变值类型

    例如 我有许多不可变值类型类EmailAddress 这确保任何非空实例都是有效的 我想将这些类型的对象的序列化控制为标准字符串表示形式 email protected cdn cgi l email protection 使用 Mongo
  • C# - cc3260mt.dll 每当我加载它时都会抛出 ArithmeticException

    我有一个 WPF 应用程序 我必须加载 DLLcc3260mt dll我通过使用 LoadLibrary 来调用它 但无论出于何种原因 我都收到了 ArithmeticException 我的代码如下 public partial clas