Domanda

Posso ripristinare i registri CTRL di FPU con questo:

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

Ma come posso salvare i registri attuali e ripristinarli in seguito?

Viene dal codice .net ..

Quello che sto facendo, è da Delphi che chiama una DLL .net come modulo COM. Controllando i registri Ctrl in delphi si ottiene un valore, controllando con controlfp nel codice .net si ottiene un altro valore. Ciò di cui ho bisogno è essenziale per fare questo:

_controlfp(_CW_DEFAULT, 0xfffff); 

Quindi i miei calcoli in virgola mobile nel codice .net non si arrestano in modo anomalo, ma voglio ripristinare i registri Ctrl al ritorno.

Forse no? Forse Delphi li sta ripristinando quando necessario? Ho scritto un blog su questo problema qui .

È stato utile?

Soluzione

uses
   SysUtils;

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

Altri suggerimenti

Stessa funzione che usi per cambiarli: _controlfp () . Se passi una maschera di 0, il valore corrente non verrà modificato, ma verrà restituito - salvalo e usa una seconda chiamata a _controlfp () per ripristinarlo in seguito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top