FPU CTRLレジスタを設定および復元するにはどうすればよいですか?
質問
これでFPUのCTRLレジスタをリセットできます:
http://support.microsoft.com/kb/326219
しかし、現在のレジスタを保存して後で復元するにはどうすればよいですか
.netコードからのものです。
私がやっているのは、Delphiが.net dllをCOMモジュールとして呼び出すことです。 delphiの Ctrl レジスタをチェックすると1つの値が得られ、.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()
の2回目の呼び出しを使用します後で復元します。
所属していません StackOverflow