mciSendStringでmp3がopen出来ない

タグの編集
投稿者 ねこまっしぐら  (社会人) 投稿日時 2017/9/16 13:56:31
windows7 vb.net2005です
mciSendStringでmp3ファイルをオープンしようとすると
>指定されたデバイス ドライバーの読み込み中に不明な問題が発生しました。
が発生します
コードは以下です
Declare Function mciSendString Lib "winmm" Alias "mciSendStringA" ( _
  ByVal lpstrCommand As String, _
  ByVal lpstrReturnString As String, _
  ByVal uReturnLength As Integer, _
  ByVal hwndCallback As IntPtr) _
  As Integer

MCICmd = "open """ & PlayFile & """ alias Media"
mciSendString(MCICmd, "", 0, IntPtr.Zero)
ググると環境依存みたいな記述がありましたが対処方法は無いでしょうか
(ちなみにmidiとwavは再生出来ました)
投稿者 ねこまっしぐら  (社会人) 投稿日時 2017/9/16 14:09:14
追加です
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32
にはMPEGVideoキーはあって値はmciqtz32.dllです
投稿者 kiku  (社会人) 投稿日時 2017/9/27 15:55:10
下記にMP3を再生する方法が記載されています。
https://dobon.net/vb/dotnet/programing/playmidifile.html

上記のコードと開示のあったコードを比較すると、
mciSendStringの定義が微妙に違うのと、
open時にパラメータ(type mpegvideo)がないことが
わかると思います。

まずはここを改善してみたらどうでしょう。
投稿者 ねこまっしぐら  (社会人) 投稿日時 2017/9/28 15:31:54
kiku様回答ありがとうございます

書くの忘れてましたがもちろんtype指定もしてもだめでした
それとmp3以外は再生出来ているのでDeclareの違いは問題無いかなと

mciqtz32.dllが原因かなと思うのですがWMPもこれ使ってるはずなので結局分からん、と
(WMPでは問題なくmp3再生出来てます)
投稿者 (削除されました)  () 投稿日時 2017/9/28 15:48:02
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/9/28 15:59:14
> Declareの違いは問題無いかなと
それでも間違いとは言い切れませんが、下記の方が望ましいと思います。
'Imports System.Runtime.InteropServices 
'Imports System.Text 
Declare Unicode Function mciSendString Lib "winmm" Alias "mciSendStringW" ( _
  ByVal lpstrCommand As String, _
  <Out, MarshalAs(UnmanagedType.LPWStr, SizeParamIndex:=2)> _
  ByVal lpstrReturnString As System.Text.StringBuilder, _
  ByVal uReturnLength As Integer, _
  ByVal hwndCallback As IntPtr) As Integer

> mciqtz32.dllが原因かなと思うのですが
AnyCPU ビルドにせず、x86 ビルドと x64 ビルドのそれぞれで試してみるとか。

> mciSendString(MCICmd, "", 0, IntPtr.Zero)
第 2 引数に「""」を渡すべきではありません。

第 3 引数を 0 を指定する場合、第 2 引数は Nothing を指定する必要があります。
第 3 引数に 1 以上の値を指定する場合、第 2 引数はその長さのバッファを含んだ変数を渡します。