【发布时间】:2017-02-02 16:40:29
【问题描述】:
能否请您帮助我了解我在 Win32 平台上的 Delphi 应用程序中的 FPU 控制字是怎么回事。
当我们创建一个新的 VCL 应用程序时,控制字设置为 1372h。这是我不明白的第一件事,为什么它是 1372h 而不是 1332h,这是在 System 单元中定义的 Default8087CW。
这两者的区别:
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,而不是恢复进入函数之前的单词状态?
【问题讨论】:
标签: delphi com fpu delphi-10.1-berlin