문제

FPU의 CTRL 레지스터를 다음과 같이 재설정 할 수 있습니다.

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

그러나 현재 레지스터를 어떻게 저장하고 나중에 복원 할 수 있습니까?

.NET 코드에서 온 것입니다 ..

내가하는 일은 Delphi에서 .net dll을 COM 모듈로 호출하는 것입니다. 확인 Ctrl 키 Delphi의 레지스터는 하나의 값을 산출하고 .NET 코드에서 ControlFP로 확인하면 다른 값이 제공됩니다. 내가 필요로하는 것은 필수적입니다.

_controlfp(_CW_DEFAULT, 0xfffff); 

따라서 .NET 코드의 부동 소수점 계산은 충돌하지 않지만 복원하고 싶습니다. Ctrl 키 돌아올 때 등록합니다.

어쩌면 나는 그렇지 않습니까? 아마도 델파이가 필요할 때 그들을 재설정하고 있습니까? 이 문제에 대해 블로그를 작성했습니다 여기.

도움이 되었습니까?

해결책

uses
   SysUtils;

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

다른 팁

변경하는 데 사용하는 동일한 기능 : _controlfp(). 0의 마스크를 전달하면 현재 값이 변경되지는 않지만 ~ 할 것이다 반품 - 저장하고 두 번째 호출을 사용하십시오. _controlfp() 나중에 복원합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top