C#でmp3再生がようやく出来ました。
P/InvokeでmciSendCommandを使用します。
大筋は,Creating a Sound Recorder in C and C# でOKです。
自分がハマった点は,
mciSendCommandの第4パラメータ(下記のparam)は,
public static extern uint mciSendCommandW(uint deviceId, uint command, UIntPtr flags, IntPtr param);
と,IntPtr型で定義し,Marshal.StructureToPtrで設定している点と,
[STAThread] public static void Main()
と Single Thread Apartment にしなければならない点でした。STAにしないと,MCIERR_CANNOT_LOAD_DRIVER(266)というエラーが返ります。
フォームを使うとSTAになるらしいのですが,まだ試作でコマンドラインレベルのため,STAになっていないようでした。
検索すると,外国の方がたいへん悩んだ様子があり,未解決のままになっているのですが,STAにするといいですよ。
STAの件は,以前にC++/CLIでMP3再生した時にも同じハマリになったのですが,すっかり忘れていました。
コメントを残す