Win32 플랫폼의 Delphi 응용 프로그램에서 FPU Control Word에서 무슨 일이 일어나는지 이해해 주시겠습니까?FPU로 시작하는 응용 프로그램이 왜 Default8087CW와 다른 제어 워드입니까?
새 VCL 응용 프로그램을 만들 때 제어 단어는 1372h로 설정됩니다. 이것이 내가 이해할 수없는 첫 번째 이유입니다. 이유는 1332h가 1330h가 아니고 Default8087CW
이 System
단위로 정의 된 것입니다.
두 차이 :
1001101110010 //1372h
1001100110010 //1332h
이 문서에 따라 예약되거나 사용되지 6 비트이다.
두 번째 질문은 CreateOleObject
입니다.
function CreateOleObject(const ClassName: string): IDispatch;
var
ClassID: TCLSID;
begin
try
ClassID := ProgIDToClassID(ClassName);
{$IFDEF CPUX86}
try
Set8087CW(Default8087CW or $08);
{$ENDIF CPUX86}
OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or
CLSCTX_LOCAL_SERVER, IDispatch, Result));
{$IFDEF CPUX86}
finally
Reset8087CW;
end;
{$ENDIF CPUX86}
except
on E: EOleSysError do
raise EOleSysError.Create(Format('%s, ProgID: "%s"',[E.Message, ClassName]),E.ErrorCode,0) { Do not localize }
end;
end;
상기 기능 137Ah
에 제어 워드를 변경하고, 그래서 제 3 비트 (오버플 마스크)를 온한다. 함수에 들어가기 전에 있던 단어의 상태를 복원하는 대신 왜 Reset8087CW
을 호출하는지 이해할 수 없습니까?
파일을 QC 보고서에 다운로드했습니다. 파일 이름은 잘리고 확장되지 않습니다. '.zip'을 추가하면 그 문제가 해결되었습니다. @AllenBauer가 탑재 된 상태에서 오랜 RTL 버그를 고칠 수 없었습니다. –
@LURD 그가 원했던 것 같지만 경영진은 그것을 허용하지 않을 것이라고 생각합니다. –
고마워, 그게 내가 생각한거야. CW를 $ 1332 tho로 설정할 가능성이 없다는 것은 내 마음에 오지 않았다. – Wodzu