5

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

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

但是我怎样才能保存当前的寄存器,然后再恢复它们呢?

它来自.net代码..

我正在做的是从 Delphi 调用 .net dll 作为 COM 模块。检查Ctrldelphi 中的寄存器会产生一个值,使用 .net 代码中的 controlfp 检查会产生另一个值。我需要的,本质上是这样做:

_controlfp(_CW_DEFAULT, 0xfffff); 

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

也许我没有?也许德尔福在需要时重置它们?我在这里写了关于这个问题的博客。

4

2 回答 2

7
uses
   SysUtils;

var
   SavedCW: Word;
begin
   SavedCW := Get8087CW;
   try
     Set8087CW($027f);
     // Call .NET code here
   finally
     Set8087CW(SavedCW);
   end;
end;
于 2008-10-13T19:01:00.987 回答
5

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

于 2008-10-10T14:07:07.197 回答