5

これでFPUのCTRLレジスタをリセットできます:

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

しかし、現在のレジスタを保存して後で復元するにはどうすればよいでしょうか?

それは.netコードからのものです..

私がやっていることは、.net dll を COM モジュールとして呼び出す Delphi からです。Delphi でレジスタをチェックCtrlすると 1 つの値が得られ、.net コードで controlfp をチェックすると別の値が得られます。私が必要としているのは、本質的にこれを行うことです:

_controlfp(_CW_DEFAULT, 0xfffff); 

したがって、.net コードでの浮動小数点計算はクラッシュしませんが、Ctrl戻るときにレジスタを復元したいと考えています。

多分私はしませんか?たぶん、Delphi は必要に応じてそれらをリセットしていますか? 私はこの問題についてここでブログを書きました。

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 を渡すと、現在の値は変更されませんが、返されます。保存して、2 番目の呼び出しを使用し_controlfp()て後で復元します。

于 2008-10-10T14:07:07.197 に答える