Delphi XE2でTWebBrowserを含むフォームを64bitコンパイルで実行すると
「0 による浮動小数点数除算」エラーが出てしまいます。。。
32bitコンパイルでは問題ないようなのですが、
回避方法をご存知の方いらっしゃいましたらお教えいただけないでしょうか?
当方の環境:
Embarcadero RAD Studio XE2 バージョン 16.0.4429.46931(Update 4適用済み)
Windows 7 Enterprise Edition x64
//サンプル
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.OleCtrls, SHDocVw;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin
WebBrowser1.Navigate('http://www.google.co.jp');
end;
end.
こんにちは,Mr.XRAYです.
>回避方法をご存知の方いらっしゃいましたらお教えいただけないでしょうか?
残念ですが,回避方法は知りません.
ただ,これから64bit 版のアプリを開発する方が増えてくるとは思うんです.
そこで,教えて頂きたいのですが,
その開発環境にインストールしている IE (Internet Explorer)のバージョンと,
Flash Player のバージョン.
それと,それらが 32bit 版なのか,64bit 版のどちらなのでしょう.
グーグル先生によると色々回避方法があるみたいですが、
私の環境では
uses Math;
procedure TForm1.FormCreate(Sender: TObject);
begin
Math.SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]);
WebBrowser1.Navigate('http://www.google.co.jp');
end;
で回避できました。
http://stackoverflow.com/questions/9472265/how-to-debug-division-by-zero-exception-in-internet-explorer
コピペして動いただけなので、詳細は知りません。
Windows7 64bit, DelphiXE2(64bitコンパイル)
IE9.0.8
あぁ…単に例外無視してるだけですね。
気持ちのよい解決策では無いみたいです。
こんにちは,Mr.XRAYです.
>あぁ…単に例外無視してるだけですね。
>気持ちのよい解決策では無いみたいです。
そんなことないと思いますよー.
数値計算ではないし,32 bit 版のアプリでは,Set8087CW が使えましたが,
64 bit の浮動小数点演算エラーは回避できないので,代わりの関数が SetExceptionMask
ですから.
[System.Math.SetExceptionMask]
http://docwiki.embarcadero.com/Libraries/ja/System.Math.SetExceptionMask
[System.Set8087CW]
http://docwiki.embarcadero.com/Libraries/ja/System.Set8087CW
64 bit 版の IE (64 bit 版の DLL)ではどうなるか知りたいんですよね.
自分でやることもできますが,もしも質問された方が...
>Mr.XRAYさん
何か勘違いされていると思うのですが、
32bitと64bitは同一プロセスで混在させることはできません。
アウトプロセスのCOMであれば、COMの形を取った単なるプロセス間通信になるので、
32bitと64bitの混在は可能ですが、WebBrowserコントロールはそうではありません。
従って64bitでコンパイルしていると書いてある以上、聞くまでもなく64bitとなります。
>従って64bitでコンパイルしていると書いてある以上、聞くまでもなく64bitとなります。
ハハハッ.そりゃそうですね.
インストールされている IE が 32 bit 版でも 64bit 版でも関係ないですね.
IE の Adin 関係で 64 bit 版では動作しないのがあるので,そういのは関係しないのか
知りたかったのですか.
>知りたかったのですか.
....「が」ですね.
返信が遅くなってしまいスミマセン。。。
>Mr.XRAYさん
IEとFlash Playerのバージョンは
IE: 9.0.8112.16421
Flash Player: 11.3.300.265
です。
IEは32bitと64bit両方がインストールされています。
Flash Playerは・・・正直よくわからないのですが、
[Flash Player の 64 ビット対応について]
http://kb2.adobe.com/jp/cps/230/230463.html
を見る限り、32bitと64bitの両方がインストールされているのでは、と思います。
>monaaさん
検索能力が低く、面目ないです。。。
ご提示いただきましたMath.SetExceptionMaskで回避可能であることを
当方のプログラムでも確認しました。
ひとまず回避できるということが分かりましたので、
(他にも検証すべき項目がありますので)一旦解決とさせていただきます。
皆様、ありがとうございます。
ツイート | ![]() |