我可以用这个重置FPU的CTRL寄存器:

http://support.microsoft.com/kb/326219

但是如何保存当前寄存器并在以后恢复?

来自.net code ..

我正在做的是来自Delphi,将.net dll称为COM模块。检查delphi中的 Ctrl 寄存器会产生一个值,使用.net代码中的controlfp检查会产生另一个值。 我需要的是,必要的是这样做:

_controlfp(_CW_DEFAULT, 0xfffff); 

所以.net代码中的浮点计算不会崩溃,但我想在返回时恢复 Ctrl 寄存器。

也许我没有?也许Delphi在需要时重置它们? 我在博客上发布了这个问题,这里

有帮助吗?

解决方案

uses
   SysUtils;

var
   SavedCW: Word;
begin
   SavedCW := Get8087CW;
   try
     Set8087CW($027f);
     // Call .NET code here
   finally
     Set8087CW(SavedCW);
   end;
end;

其他提示

用于更改它们的相同功能: _controlfp()。如果传入0的掩码,则不会更改当前值,但会返回 - 保存它,并使用第二次调用 _controlfp()以后恢复它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top