delphi “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

时间: 2024-09-09 23:20:18

delphi “Invalid floating point operation.”错误的解决方法的相关文章

php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法_php技巧

本文实例讲述了php下foreach()错误提示Warning: Invalid argument supplied for foreach() 的解决方法.分享给大家供大家参考.具体实现方法如下: 一.问题: php下foreach()错误提示Warning: Invalid argument supplied for foreach() 错误提示:Warning: Invalid argument supplied for foreach() in E:wampwwwmyshopcart.p

vbnet-Collection?was?modified;?错误的解决方法

问题描述 Collection?was?modified;?错误的解决方法 自编了一个资料管理软件,使用vs2010,vb.net编写,运用到ADO?.Access2010,软件分为主界面和分界面,在使用过程中发现,关闭分界面的时候没有安装vs2010的电脑会弹出下面的错误,但是已安装vs2010的电脑则不会弹出错误,求各位大神知道这错误是怎么引起的.(注:全软件编程没有使用到foreach) System.InvalidOperationException:?Collection?was?mo

Win8系统安装过程中提示Error Code:0x0000005D错误的解决方法

  win8系统虽然在慢慢退出市场,不过还是有不少的用户喜欢Win8系统的风格,而在Win7升级win8系统的过程中会出现一些问题,有位用户遇到错误提示Error Code:0x0000005D的问题,该如何解决此问题呢?下面小编研究整理安装Win8系统提示Error Code:0x0000005D错误的解决方法. 错误信息如下: Your PC needs to restart. Please hold down the power button Error Code:0x0000005D P

使用存储过程时一个错误的解决方法。

存储过程|错误|解决 这段时间用了一下C++ Builder ,在调用存储过程的时候遇到了一些问题,问了很多地方都没有找到答案,最后还是靠自己,现在拿出来和大家分享. 示例代码:    StoredProc1->Params->Clear();   StoredProc1->Params->CreateParam( ftSmallint, "@m1",   ptInput);   StoredProc1->Params->CreateParam( f

使用存储过程时一个错误的解决方法

存储过程|错误|解决 jackxm(原作) 这段时间用了一下C++ Builder ,在调用存储过程的时候遇到了一些问题,问了很多地方都没有找到答案,最后还是靠自己,现在拿出来和大家分享. 示例代码:    StoredProc1->Params->Clear();   StoredProc1->Params->CreateParam( ftSmallint, "@m1",   ptInput);   StoredProc1->Params->Cre

SQL SERVER 2005远程登陆18456错误的解决方法

一.SQL SERVER 2005 登陆18456错误的解决方法 很多朋友使用MSsql的时候本机能够正常登陆SQL2005的SQL Server Management Studio. 但是远程无法登陆1433,SQL Server 2005无法远程连接到1433.SQL(Microsoft SQL Server 2005 )登录不上去了,原来是出现了几个小问题,现在记录一下我的解决这几个情况的办法.(解决方法有很多种,这些只是我的解决方法,仅供参考) 错误提示: 标题: 连接到服务器 ----

解析使用存储过程时一个错误的解决方法

这段时间用了一下C++ Builder ,在调用存储过程时遇到了一些问题,问了很多人都没有找到答案,最后还是靠自己解决了问题,现在拿出来和大家分享. 示例代码: StoredProc1->Params->Clear();StoredProc1->Params->CreateParam( ftSmallint, "@m1", ptInput);StoredProc1->Params->CreateParam( ftString, "@m2&q

C#中ArrayList.CopyTo()运行错误的解决方法

在开始讲解C#中ArrayList.CopyTo()运行错误的解决方法之前,先给大家看一段代码: 以下是引用片段: ArrayList list = new ArrayList(); list.Add(1); list.Add(2); byte[] buf = new byte[2]; list.CopyTo(buf); 这段代码看上去,好正常,编译也很顺利通过,不过执行的时候出错了,为什么? 解剖ArrayList,其内部是用一个object 数组实现的,作为一切元素的容器,值类型必须转换成引

win8应用商店出现0x80073cf9错误的解决方法

本教程为大家介绍在使用windows 8应用商店时出现0x80073cf9错误的解决方法. 打开 Win8 应用商店,安装Win8应用的时候,如果出现 未安装此应用 – 查看详细信息,出现了问题,此应用无法安装.请再试一次.错误代码:0x80073cf9 解决方法很简单:在C:Windows 建立 auinstallagent 文件夹就可以解决了. 出现这种情况,可能是一些清理软件,清理空文件夹的时候,把 auinstallagent 文件夹也给消失了!