在showmodal Delphi XE8上浮点除零

时间:2015-09-24 05:53:56

标签: delphi floating-point delphi-xe8 divide-by-zero

我最近将我的应用程序从Delphi 2007升级到Delphi XE8。在几种形式中,Form.showmodel行抛出“浮点除零”异常。在那些表格上根本没有进行算术运算。

我尝试在showmodal之前执行以下代码来解决问题。

  var
  CW, SW: word;

  function GetX87CW: word;
    ASM
    FStCW [Result]
  End;

  Function GetX87SW: word; // Assembler;
    ASM
    FStSW [Result]
  End;

  CW := GetX87CW; SW := GetX87SW;

  ShowMessage(Format('CW = $%4x, SW = $%4x',[CW,SW]));

我没有保存此代码并注释掉所有代码,并再次重新编译了解决该问题的应用程序。

现在我关闭了Delphi并重新启动了XE8 IDE。我打开了这个项目,这个问题又开始出现了,但这一次,即使我写了上面的代码,它仍然会抛出异常。

有没有人看到这样的问题,有人可以说明这个问题的可能原因吗?

1 个答案:

答案 0 :(得分:0)

您使用的是COM对象,例如调用.Net程序集?还是OpenGL?还是一些OleDB / ADO提供商?任何其他外部.dll?我想是的。

听起来像this issue。您应该尝试通过为每次调用保存和恢复FPU异常标志来使外部非Delphi调用安全。

正如肯写道:

var
  Saved8087CW: Word;
begin
  Saved8087CW := Default8087CW;
  // If you want, disable all fpu exceptions 
  // with the next line.
  Set8087CW($133F);
  DoYourComOperationHere;
  Set8087CW(Saved8087CW);
end;