2008-10-10 2 views
5

я могу сбросить CTRL FPU в регистры с этим:Как установить и восстановить регистры FPU CTRL?

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

Но как я могу сохранить текущие регистры, и восстановить их позже?

Это из кода .NET ..

Что я делаю, от Delphi вызова в .net библиотеки DLL в качестве COM-модуля. Проверка регистров Ctrl в delphi дает одно значение, проверка с помощью controlfp в коде .net дает другое значение. Что мне нужно, это незаменимый должны сделать это:

_controlfp(_CW_DEFAULT, 0xfffff); 

Так что мои расчеты с плавающей точкой в ​​коде .net не откажут, но я хочу, чтобы восстановить Ctrl регистров при возврате.

Возможно, нет? Может быть, Delphi сбрасывает их при необходимости? Я писал об этой проблеме here.

ответ

7
uses 
    SysUtils; 

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

Та же функция, которую вы используете для их изменения: _controlfp(). Если вы передадите маску в 0, текущее значение не будет изменено, но будет возвращено - - сохраните его и воспользуйтесь вторым вызовом _controlfp(), чтобы восстановить его позже.

+0

хорошая идея, проблема в том, что я не понял, что положить в маску и т. Д., Но метод delphi Set8087CW abowe был очень приятным. – neslekkiM 2008-10-14 14:43:56

Смежные вопросы