【发布时间】:2012-03-10 16:20:45
【问题描述】:
在 Delphi 2010 和 Delphi 2007 中,我在 WebBrowserBeforeNavigate / WebBrowserDocumentComplete 上使用 Set8087CW 以防止 ActiveX 中的 FPU 错误削弱我的应用程序。
但不知何故,这在 Delphi XE2 中不起作用,至少在 64 位模式下是这样。
单击链接(任何)时,我得到“浮点数除以零”。 (将网站地址或内容初始加载到 TWebBrowser 工作正常。)
调用堆栈显示这发生在 system32\D3D10Warp.dll(可能被 IE9 使用?)中以响应 TApplication.ProcessMessage(以及两者之间的一些???)
【问题讨论】:
-
文档说 (docwiki.embarcadero.com/VCL/en/System.Set8087CW):Set8087CW 在 64 位 Windows 上:此控制字不控制浮点运算,因为 SSE 寄存器用于浮点在 64 位模式下,而不是 FPU(浮点单元)。但是 FPU 仍然存在于 64 位模式中,因此 SGet8087CW 设置控制字的值,就像在 32 位模式中一样。
-
@teran,是的,但是
SGet8087CW是什么? -
@TLama
Set8087CW的拼写错误,复制自 docwiki.embarcadero.com/VCL/en/System.Set8087CW。 -
@Tom 还有
SetMXCSR。我的建议是同时使用它和Set8087CW。无论 Delphi 使用什么进行浮点运算,32 位和 64 位 Windows 都可以使用 FPU 和 SSE 操作。 -
@Tom,抱歉打错了。我的意思是 FPU(不是 FTP)。
标签: delphi 64-bit delphi-xe2 floating-point-exceptions