- ベストアンサー
Windows7の互換モード(XP)での問題
- Windows7の互換モード(XP)で、1つ目のWAVファイルは再生できるが、2つ目以降は再生されない問題が発生しています。Windows Media Playerのバージョンやダウングレードの方法を調べたが解決策が見つからず、教えていただきたいです。
- Windows7の互換モード(XP)で作成したアプリケーションでWindows Media Playerを使用しています。1つのWAVファイルの再生が完了すると、次のWAVファイルを再生するための準備をするために『end of stream』イベントを使っています。しかし、2つ目以降のWAVファイルが再生されません。解決策をお知りの方はいらっしゃいませんか?
- Windows7の互換モード(XP)で問題が発生しています。1つ目のWAVファイルは再生されるが、2つ目以降のWAVファイルが再生されません。Windows Media Playerのバージョンは12で、ダウングレードもできないようです。解決策を教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
前提として ・ReleaseモードではDB、サードパーティのOCX、DLLはXP互換モードでは働く ・Debugモードではうまく働かない ・Windows Media Playerに問題がありそうだ とします。 このような場合、私なら ReleaseモードでMsgBoxを使います。 『end of stream』イベント処理の最初で、処理ルーチンに入ったかどうかのMsgBox 処理の区切り区切りでその部分を通っているか、パラメータ、変数の値は正しいかを表示するMsgBox などを入れて、実行ファイル(Release)をXP互換モードで動かしてみます。 感覚的にはWindows Media Player12へのパラメータの引渡しが違っているように思いますので、その辺りの情報もmSGbOXで表示するようにして、どこで予定通りの動作をしないか確認します。 .NETに移行された方が良いかと思いますが、.NETのバージョンとOSのバージョンの問題もありますので、その辺りも考慮された方が良いかと思います。 ちなみに私は .NET 2.0 を対象に作っていて、まだそれ以上に上げようとは思っていません(個人的には3.0/3.5/4.0も使っています)。 ご質問への直接の回答でなくて申し訳ありません。
その他の回答 (2)
- samtomsan
- ベストアンサー率55% (1060/1897)
> 当該イベントの最後の行にMsgBoxをいれることで、『end of stream』イベント内の処理は正常に処理されます 多分ですが、処理内に別スレッドで処理する部分があり、そのスレッドが終了してからイベント処理を終了しなければならないのに、スレッド処理が終了しない内にイベント処理が先に進んで終了してしまって、予定通りに働いていないのではないかと思います。 MsgBoxによってイベント処理が中断していますから、その間にスレッドの処理が終了して、結果的に予定通りに働くのではないかと思います。 最後のMsgBoxの位置を少しずつ前にずらして、予定通り終わる位置と予定通りに終わらない位置を確定すれば、どの部分か判ると思います。 その部分が終わるまで待つように工夫すればよいのではないかと思います。 その処理がわかりませんので対処方法も判りませんが、一番簡単な方法は例えば時刻を取得して指定秒経つまでループさせて(待ち時間をもうける)から先に進める方法ですね。 あるいはその部分の後ろに DoEvents を入れてCPUを他(スレッド)に渡せばOKかもしれません。
- samtomsan
- ベストアンサー率55% (1060/1897)
> WindowsXPで作成していたアプリケーション ご自分で作成されているようですから、VB6をWindows7マシンにインストールして、『end of stream』イベントの部分をデバッグしてみたら判るのではないでしょうか。 VB6はWindows7にインストールできます。
補足
回答ありがとうございます。 デバックは試みましたがその際、『end of stream』以外(例えば、DB処理やサードパーティ製のOCXやDLL等)でエラーがでており、そちらを改善しないとデバックが行えない状態です。またサードパーティ製のソフトは、Windows Vistaや7でのサポート対象外(動作保証できない)でもあるので、Windows7の互換モードでの検証でおおよそWindows Media Player以外問題がないのでそれが改善できれば、現ソフトでのサポートを止め、.NETで開発を進めようと考えております。 ご教授願えれば助かります。
お礼
回答有難うございます。 .NETに関しては、現行のアプリケーションを完全に作りなおす事が前提となっておりますので、それまでの繋ぎとしてWindows7への対応検証を行っておりました。 『end of stream』イベント処理内でMsgBoxをいれて、確認を行ってみます。 有難うございます。
補足
『end of stream』イベント処理内でMsgBoxをいれて、確認を行ってみました所、当該イベントの最後の行にMsgBoxをいれることで、『end of stream』イベント内の処理は正常に処理されます。しかし、Msgboxをコードから消すと正常に処理されません。これってどういう事なのでしょうか?すみませんがご教授いだけませんでしょうか?