Wie kann ich und FPU CTRL-Register wieder herstellen?
Frage
Ich kann zurückgesetzt FPU des CTRL-Register mit dieser:
http://support.microsoft.com/kb/326219
Aber wie kann ich aktuelle Register speichern und wiederherstellen sie später?
Es ist von .net Code ..
Was ich tue, ist von Delphi eine .net dll als COM-Modul aufrufen. Überprüfen Sie die Strg Register in delphi Ausbeute ein Wert, mit controlfp im .NET-Code überprüft einen anderen Wert. Was ich brauche, ist in wesentlich ist, dies zu tun:
_controlfp(_CW_DEFAULT, 0xfffff);
Also meine Fließkommaberechnungen in dem .net-Code nicht abstürzt, aber ich mag die Wiederherstellung Strg Register bei der Rückkehr.
Vielleicht kann ich nicht? Vielleicht ist Delphi ihnen Zurücksetzen, wenn nötig? Ich gebloggt dieses Problem hier .
Lösung
uses
SysUtils;
var
SavedCW: Word;
begin
SavedCW := Get8087CW;
try
Set8087CW($027f);
// Call .NET code here
finally
Set8087CW(SavedCW);
end;
end;
Andere Tipps
Die gleiche Funktion können Sie sie ändern verwenden: _controlfp()
. Wenn Sie in einer Maske von 0 übergeben, wird der aktuelle Wert nicht verändert werden, aber es wird zurückgegeben werden -. Speichern, und einen zweiten Anruf verwenden, um _controlfp()
, um sie wiederherzustellen später