Pregunta

Puedo restablecer los registros CTRL de FPU con esto:

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

Pero, ¿cómo puedo guardar los registros actuales y restaurarlos más tarde?

Es del código .net ..

Lo que estoy haciendo es de Delphi llamando a un .net dll como módulo COM. Verificar los registros Ctrl en delphi produce un valor, verificar con controlfp en el código .net proporciona otro valor. Lo que necesito es esencial para hacer esto:

_controlfp(_CW_DEFAULT, 0xfffff); 

Por lo tanto, mis cálculos de coma flotante en el código .net no se bloquean, pero quiero restaurar los registros Ctrl al regresar.

¿Quizás no? ¿Quizás Delphi los está reiniciando cuando sea necesario? Publiqué un blog sobre este problema aquí .

¿Fue útil?

Solución

uses
   SysUtils;

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

Otros consejos

La misma función que usa para cambiarlos: _controlfp () . Si pasa una máscara de 0, el valor actual no se alterará, pero se devolverá : guárdelo y use una segunda llamada a _controlfp () para restaurarlo más tarde.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top