Pergunta

Eu posso redefinir registros CTRL da FPU com este:

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

Mas como posso salvar registros atuais, e restaurá-los mais tarde?

É a partir do código .net ..

O que eu estou fazendo, é de Delphi chamar um .net dll como um módulo COM. Verificar o Ctrl registros em delphi deu um valor, verificando com controlfp no código .net dá outro valor. O que eu preciso, é no essencial é fazer isso:

_controlfp(_CW_DEFAULT, 0xfffff); 

Então meus cálculos de ponto flutuante no código .net não falhar, mas eu quero restaurar o Ctrl registros quando retornar.

Talvez eu não? Talvez Delphi está redefinindo-los quando necessário? Eu escrevi sobre este problema aqui .

Foi útil?

Solução

uses
   SysUtils;

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

Outras dicas

A mesma função que você usa para alterá-los: _controlfp(). Se você passar em uma máscara de 0, o valor atual não será alterado, mas irá ser devolvido -. Salvá-lo, e usar uma segunda chamada para _controlfp() para restaurá-lo mais tarde

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top