Question

Je peux réinitialiser les registres CTRL de la FPU avec ceci:

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

Mais comment puis-je sauvegarder les registres actuels et les restaurer plus tard?

Cela provient du code .net ..

Ce que je suis en train de faire, c’est que Delphi appelle une dll .net en tant que module COM. Vérifier les registres Ctrl dans delphi donne une valeur, vérifier avec controlfp dans le code .net en donne une autre. Ce dont j'ai besoin, c’est essentiel:

_controlfp(_CW_DEFAULT, 0xfffff); 

Ainsi, mes calculs en virgule flottante dans le code .net ne se bloquent pas, mais je souhaite restaurer les registres Ctrl lors du renvoi.

Peut-être que non? Peut-être que Delphi les réinitialise en cas de besoin? J'ai blogué à propos de ce problème ici . .

Était-ce utile?

La solution

uses
   SysUtils;

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

Autres conseils

Même fonction que vous utilisez pour les changer: _controlfp () . Si vous transmettez un masque de 0, la valeur actuelle ne sera pas modifiée, mais elle sera renvoyée - sauvegardez-la et utilisez un second appel à _controlfp () pour le restaurer plus tard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top