C#学习教程:C#-cc3260mt.dll每当我加载它时抛出ArithmeticException使用LoadLibrary(),但无论出于何种原因我得到一个ArithmeticException。这就是我的代码:publicpartialclassMainWindow:Window{[DllImport("kernel32.dll")]staticexternIntPtrLoadLibrary(stringdllToLoad);[DllImport("kernel32.dll")]staticexternIntPtrFreeLibrary(IntPtrhModule);publicMainWindow(){InitializeComponent();尝试{stringcc3260mtPath="dll/cc3260mt.dll";IntPtrcc3260Link=LoadLibrary(cc3260mtPath);}catch(Exceptionex){Console.WriteLine("ERROR:"+ex.Message);}}//<--这是我得到异常的地方。当我单步执行我的代码时,我可以清楚地看到当我离开MainWindow()类时发生了异常。你们有什么想法让我得到这个例外吗?这是旧BorlandC或C++程序的C运行时支持库。是的,它通常与.NET代码非常不兼容,尤其是WPF,它重新编程浮点单元控制寄存器。它启用硬件异常,当浮点运算失败时会引发硬件异常。这在WPF中尤其成问题,因为经常使用Double.NaN。这会产生一个FPU异常,CLR将其拦截并作为ArithmeticException重新抛出。您必须撤消此DLL所做的操作并恢复FPU控制字。这是有问题的,.NET不允许您像这样直接访问硬件。但是您可以使用一个技巧,让CLR在处理异常时自动对FPU重新编程。所以你可以故意产生一个异常并捕获它。像这样:IntPtrcc3260Link=LoadLibrary(cc3260mtPath);try{thrownewException("请忽略这个,重置FPU");}catch(Exceptionex){}请注意这样做的后果,您现在将运行本机代码,而无需通常依赖它。也许这会奏效。以上就是C#学习教程:每当我加载它时,C#-cc3260mt.dll都会抛出ArithmeticException的所有内容分享,如果对大家有用还需要详细了解C#学习教程,希望大家多多关注——本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
