您能否帮助我了解我在 Win32 平台上的 Delphi 应用程序中的 FPU Control Word 发生了什么。
当我们创建一个新的 VCL 应用程序时,控制字设置为 1372h。这是我不明白的第一件事,为什么它是 1372h 而不是单位中Default8087CW
定义的 1332h 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
之后调用,而不是恢复进入函数之前的单词状态?