Win32 プラットフォームの Delphi アプリケーションで FPU コントロール ワードで何が起こっているのかを理解するのを手伝ってくれませんか。
新しい VCL アプリケーションを作成すると、コントロール ワードは 1372h に設定されます。これは私が理解できない最初のことです。なぜユニットでDefault8087CW
定義されている1332hではなく1372hなのか。System
これら2つの違い:
1001101110010 //1372h
1001100110010 //1332h
ドキュメントによると、予約されているか使用されていない6番目のビットです。
2 番目の質問は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
関数に入る前の単語の状態を復元するのではなく、後で呼び出す理由がわかりませんか?