【症状】
WindowsVista上で以下のソースを実行して
動画シークバーを何度か移動する操作をすることで
\"不正な浮動小数点数演算\"エラーが発生します。
【再現方法】
//ここから
■MCIオブジェクト
・ファイル ←ファイル設定 →ファイル取得
・表示先ハンドル ←表示H設定 →表示H取得
・X ←X設定 →X取得
・Y ←Y設定 →Y取得
・W ←W設定 →W取得
・H ←H設定 →H取得
・タイムフォーマット ←TF設定 →TF取得 #{ms(ミリ秒)|msf(mm:ss:ff)|tmsf(t:mm:ss:ff)}
・長さ →長さ取得
・状態 ←状態設定 →状態取得 #{再生,playing|停止,stoped|一時停止,paused}
・位置 ←位置設定 →位置取得
・ミュート ←ミュート設定 →ミュート取得
・音量 ←音量設定 →音量取得
・右音量 ←右音量設定 →右音量取得
・左音量 ←左音量設定 →左音量取得
・速さ ←速さ設定 →速さ取得
・ループ{=0}
・元サイズ →元サイズ取得
・{非公開}動画か(V)~OR(V=「.avi」,OR(V=「.mpg」,OR(V=「.mpeg」,OR(V=「.wmv」,V=「.mov」))))
・範囲再生(AからBの)~
もし、ループがオンなら「play {名前} repeat from {A} to {B}」をMCI送信。
違えば「play {名前} from {A} to {B}」をMCI送信。
・{非公開}ファイル設定(FILE)~
もし、Fファイルが空でなければ名前をMCI閉じる
もし、(FILEが存在)でなければ「ファイルが存在しません」でエラー発生
「open \"{FILE}\" alias \"{名前}\" type mpegvideo」をMCI送信。
FファイルはFILE
もし、動画か(Fファイルから拡張子抽出)なら
元サイズ取得。
FWは_[2]
FHは_[3]
・{非公開}F表示H
・{非公開}表示H設定(V)~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「window {名前} handle {V}」をMCI送信。
F表示H=V
違えば、「ファイルが動画ではありません」でエラー発生
・{非公開}表示H取得~
それ=F表示H
・{非公開}FX{=0}
・{非公開}FY{=0}
・{非公開}FW{=0}
・{非公開}FH{=0}
・{非公開}X設定(V)~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「put {名前} destination at {V} {Y} {W} {H}」をMCI送信。
FX=V
違えば、「ファイルが動画ではありません」でエラー発生
・{非公開}X取得~それ=FX
・{非公開}Y設定(V)~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「put {名前} destination at {X} {V} {W} {H}」をMCI送信。
FY=V
違えば、「ファイルが動画ではありません」でエラー発生
・{非公開}Y取得~それ=FY
・{非公開}W設定(V)~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「put {名前} destination at {X} {Y} {V} {H}」をMCI送信。
FW=V
違えば、「ファイルが動画ではありません」でエラー発生
・{非公開}W取得~それ=FW
・{非公開}H設定(V)~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「put {名前} destination at {X} {Y} {W} {V}」をMCI送信。
FH=V
違えば、「ファイルが動画ではありません」でエラー発生
・{非公開}H取得~それ=FH
・{非公開}元サイズ取得~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「where {名前} source」をMCI送信。
「 」で区切る。
違えば、「ファイルが動画ではありません」でエラー発生
・閉じる~
もし、Fファイルが空でなければ名前をMCI閉じる。
Fファイルは空。
・{非公開}Fファイル
・{非公開}ファイル取得~それはFファイル
・{非公開}状態取得~
もし、Fファイルが空でなければ「status {名前} mode」をMCI送信。
違えば、それは空
・{非公開}状態設定(V)~
もし、Fファイルが空でなければ
もし、OR(V=「playing」,V=「再生」)なら
もし、自身→ループ=1なら「play {名前} repeat」をMCI送信。
違えば「play {名前}」をMCI送信。
もし、OR(V=「stoped」,V=「停止」)なら名前をMCI停止
もし、OR(V=「paused」,V=「一時停止」)なら「pause {名前}」をMCI送信。
・{非公開}TF設定(V)~「set {名前} time format {V}」をMCI送信。
・{非公開}TF取得~「status {名前} time format」をMCI送信。
・{非公開}位置設定(V)~
もし、Fファイルが空でなければ
F状態は状態
Vで条件分岐
「始め」なら「seek {名前} to start」をMCI送信。
「終わり」なら「seek {名前} to end」をMCI送信。
違えば「seek {名前} to {V}」をMCI送信。
状態は「{F状態}」
・{非公開}位置取得~
もし、Fファイルが空でなければ「status {名前} position」をMCI送信。
違えば、それ=0
・{非公開}音量設定(V)~
もし、Fファイルが空でなければ「setaudio {名前} volume to {V}」をMCI送信。
・{非公開}音量取得~
もし、Fファイルが空でなければ「status {名前} volume」をMCI送信。
違えば、それ=1000
・{非公開}右音量設定(V)~
もし、Fファイルが空でなければ「setaudio {名前} right volume to {V}」をMCI送信。
・{非公開}右音量取得~
もし、Fファイルが空でなければ「status {名前} right volume」をMCI送信。
違えば、それ=1000
・{非公開}左音量設定(V)~
もし、Fファイルが空でなければ「setaudio {名前} left volume to {V}」をMCI送信。
・{非公開}左音量取得~
もし、Fファイルが空でなければ「status {名前} left volume」をMCI送信。
違えば、それ=1000
・{非公開}Fミュート{=0}
・{非公開}ミュート設定(V)~
もし、Fファイルが空でなければ
もし、Vが1なら
「set {名前} audio all off」をMCI送信。
Fミュート=1
違えば
「set {名前} audio all on」をMCI送信。
Fミュート=0
・{非公開}ミュート取得~それ=Fミュート
・{非公開}速さ設定(V)~
もし、Fファイルが空でなければ「set {名前} speed {V}」をMCI送信。
・{非公開}速さ取得~
もし、Fファイルが空でなければ「status {名前} speed」をMCI送信。
違えば、それ=1000
・{非公開}長さ取得~「status {名前} length」をMCI送信。
//サンプルプログラム
//○サンプル(動画プレーヤー)
動画パス=「ムービー|*.avi;*.mpg;*.mpeg;*.mov;*.wmv」のファイル選択
もし、動画パス=空ならば、終わり。
テストとはMCIオブジェクト。そのファイル=動画パス。
その表示先ハンドル=母艦のハンドル。
母艦について
クライアントWは(テストのW)。
クライアントHは(テストのH+10)。
サイズ変更した時は~
テストのWは(母艦のクライアントW)。
テストのHは(母艦のクライアントH-10)。
閉じた時は~テストを閉じる。
更新=0
動画シークバーとはバー。
そについて
レイアウトは下。
Hは10。
最大値は(テストの長さ)。
変更した時は~もし、更新中=0ならテストの位置は(動画シークバーの値)。テストの状態は「再生」。
更新タイマーとはタイマー。
そについて
値は100。
時満ちた時は~
更新中=1。
動画シークバーの値は(テストの位置)。
更新中=0。
有効はオン。
テストの状態は「再生」。
//ここまで
※以下の質問掲示板のソース&TMさんのMCIオブジェクトグループを引用させて頂いています。
http://www.himanavi.net/cgi/nade-bbs2/cbbs.cgi?mode=one&number=6967&type=6955&space=15&no=0
【要望】
修正またはエラーにならないような対策を・・・
再現しなければもしかするとこちらの問題かもしれません・・・
【バージョン】version 1.5071
【その他】
ffdshowをインストールしているのでそれが原因かと思い、
vnako.exeではffdshowを利用しない設定にしたりなどしましたが、
それでも発生するようなので書き込まさせて頂きました。