delphi “Invalid floating point operation.”错误的解决方法

本文详细介绍了在Delphi2011中遇到OpenGL3D渲染时出现Invalid floating point operation.错误的原因及解决方法,通过禁用浮点异常操作来避免该问题。

这两天用webbrower写东西,有时候打开SSL加密站点时会出现”Invalid floating point operation.”的错误,上网搜了下,把解决方法贴上。

 

导致原因


Delphi2011中须要通过浮点单位控制指令设置浮点运算单位。浮点单位控制指令控制着浮点运算的精度、四舍五入的方式以及特定的浮点运算是否触发异常。能够參阅Intel处理器的具体文档。


Delphi2011中有函数能够直接訪问处理器的控制指令。比方,能够使用Set8087CW函数改变8087CW控制指令的值,从而改变程序浮点计算的行为。编程人员须要自己负责在程序结束时重置这个指令。

 

 


解决的方法,就是直接禁用浮点异常,方法例如以下:
在在Delphi2011中,当使用OpenGL进行3D渲染时,推荐使用Set8087CW函数禁用浮点异常。能够在调用OpenGL函数之前,比方在mainForm的OnCreate的过程中写入: Set8087CW(0x133f)
实例代码:
1.声明全局的变量保存原有的8087CW设置
var
Saved8087CW: Word;
2.在mainForm的OnCreate过程中改变8087CW的值,改变之前先保存默认值
Saved8087CW := Default8087CW;
Set8087CW($133f); { Disable all fpu exceptions }
3.在程序结束前,使用默认值重置8087CW指令值。在mainForm的OnClose过程中
Set8087CW(Saved8087CW);
4.另一点须要注意,假设在程序中使用了SceneControl.LoadSxFile加载了3D文档,那么必须在程序退出时,在Set8087CW之前调用IScene的ClearLayers方法清除图层,否则程序在退出时会出现异常。
參考代码为:
SceneControl1.Scene.ClearLayers;
Set8087CW(Saved8087CW);
5.还有在程序退出之前须要调用例如以下语句
(CoAoInitialize.Create as IAoInitialize).Shutdown

转载于:https://www.cnblogs.com/zfyouxi/p/4054204.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值