zoukankan      html  css  js  c++  java
  • EmbeddedWebBrowser网站报“Invalid floating point operation”异常的解决方法

    我一直使用EmbeddedWebBrowser来做一个自己用的浏览器,不过发现在进入某些网站是浏览器卡死或崩溃,查看错误日之后发现基本都是Flash.ocx Active控件先产生异常,然后抛出Invalid floating point operation的错误,产生这种错误的网站基本上都是些视频网站,最典型的就是腾讯视频,对于这个异常的处理方法,一直没找到,直到最近看了园子里Eboy's blog的这篇文章

    http://www.cnblogs.com/jxgxy/archive/2012/03/13/2394129.html

    之后才找到解决问题的方法,按照上面的介绍,我在主窗体的Create事件中加入了代码:

    Set8087CW(Longword($133f)); 

    编译 运行 测试 问题依旧!

    难道是这种办法是忽悠人的???

    我的浏览器都是动态创建的,会不会是这个原因??我也在浏览的创建事件中加入了上面的代码,测试后发现问题依旧,无奈之下突然想起了谷歌,于是随便搜了一下,结果发现了这个:

    http://stackoverflow.com/questions/8200581/twebbrowser-crashes-with-embedded-youtube-clips

    function Get8087CW: Word; // for D5
    asm
            PUSH    0
            FNSTCW  [ESP].Word
            POP     EAX
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Timer1.Enabled := False;
      Timer1.Interval := 5000; // 5 sec
      Saved8087CW := Get8087CW;
    end;
    
    procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    begin
      Timer1.Enabled := False;
      System.Set8087CW($133F); // Disable all fpu exceptions
    end;
    
    procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
       Timer1.Enabled := True;
    end;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      Timer1.Enabled := False;
      Set8087CW(Saved8087CW);
    end;

    得到这个答案后,我立即在WebBrowser的WebBrowser1BeforeNavigate2事件中加入了

    Set8087CW($133F); 

    并未按照原帖的方法处理,神奇的事情发生了,这个问题居然解决了。

    看了看原帖,原来只是强制关闭了FPU 浮点错误

    后继测试还表明,这种关闭并不完全,有时还是会抛出Invalid floating point operation异常的,不过问题已经得到解决了!

  • 相关阅读:
    【u020】Couple number
    【HDU5748】Bellovin
    【CF706C】Hard problem
    【u021】广义斐波那契数列
    【u024】没有上司的舞会
    【u025】贝茜的晨练计划
    【u026】房间最短路问题
    Core Data 数据出现Fault
    Core Data 数据出现Fault
    非常优秀的Javascript(AJAX) 开发工具:Aptana
  • 原文地址:https://www.cnblogs.com/uws2056/p/3291794.html
Copyright © 2011-2022 走看看