「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@104) [中] [未処理]
@104■ (#257) Vista上でMCIを利用した時に、\"不正な浮動小数点数演算命令\"で停止する - area (2008-11-03 00:05) /中 未処理
【症状】
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を利用しない設定にしたりなどしましたが、
それでも発生するようなので書き込まさせて頂きました。

(#258) 記述ミス - area (2008-11-03 18:18) /低 解決
そういえば、と思い、Makotoさんの\"なでぷれいや\"を使ってみたところ
エラーは発生しませんでした。

こちら側の記述ミスかと思いますので解決にさせて頂こうと思います
ご迷惑をおかけしましたm(_ _)m

(#259) 何度もすみません・・・ - area (2008-11-03 18:31) /中 未処理
なでぷれいやでも、同様の問題が発生しました。
どうやら発生するタイミングがばらばらなようです

何度もすみませんが、状態を戻します。

(#257)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能