mciSendStringでmp3がopen出来ない への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 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 引数はその長さのバッファを含んだ変数を渡します。 
投稿者 (削除されました)  () 投稿日時 2017/9/28 15:48:02
(削除されました)
投稿者 ねこまっしぐら  (社会人) 投稿日時 2017/9/28 15:31:54
kiku様回答ありがとうございます

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

mciqtz32.dllが原因かなと思うのですがWMPもこれ使ってるはずなので結局分からん、と
(WMPでは問題なくmp3再生出来てます)
投稿者 kiku  (社会人) 投稿日時 2017/9/27 15:55:10
下記にMP3を再生する方法が記載されています。
https://dobon.net/vb/dotnet/programing/playmidifile.html

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

まずはここを改善してみたらどうでしょう。
投稿者 ねこまっしぐら  (社会人) 投稿日時 2017/9/16 14:09:14
追加です
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32
にはMPEGVideoキーはあって値はmciqtz32.dllです
投稿者 ねこまっしぐら  (社会人) 投稿日時 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は再生出来ました)