Könnten Sie mir bitte helfen zu verstehen, was mit FPU Control Word in meiner Delphi-Anwendung auf Win32-Plattform vorgeht.Warum startet eine Anwendung mit einem anderen FPU-Steuerwort als Default8087CW?
Wenn wir eine neue VCL-Anwendung erstellen, wird das Steuerwort auf 1372h gesetzt. Dies ist das erste, was ich nicht verstehe, warum es 1372h statt 1332h ist, die Default8087CW
in System
Einheit definiert ist.
Der Unterschied zwischen diesen beiden:
1001101110010 //1372h
1001100110010 //1332h
ist das 6. Bit, das Dokumentation nach reserviert ist oder nicht verwendet wird.
Die zweite Frage betrifft 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;
Die obige Funktion 137Ah
Steuerwort ändert, so wird er auf der 3. Bit (Überlauf-Maske) drehen. Ich verstehe nicht, warum es Reset8087CW
danach aufruft, anstatt den Zustand des Wortes wieder herzustellen, das war, bevor ich in die Funktion eintrat?
Die Datei wurde in Ihrem QC-Bericht heruntergeladen. Beachten Sie, dass der Dateiname abgeschnitten und ohne Erweiterung ist. Durch das Hinzufügen von '.zip' wurde dieses Problem behoben. Schade, dass @AllenBauer den langen RTL-Bug nicht beheben konnte, während er an Bord war. –
@LURD Ich denke, er wollte, aber das Management würde es nicht zulassen. –
Danke, das habe ich mir gedacht. Es kam mir nicht in den Sinn, dass es keine Möglichkeit gibt, CW auf 1332 Dollar zu setzen. – Wodzu