Help us understand the problem. What is going on with this article?

.NET FrameworkでWindows Media Player Controlを利用するもう一つの方法

More than 5 years have passed since last update.

.NET Frameworkでサウンドを再生するときは、Windows Media Player Controlを利用すると、さまざまな形式のファイルを利用できて便利です。その方法はDOBON.NETに解説があります。しかしこの方法を使うアプリケーションには、自動的に生成されるInterop.WMPLib.dllとAxInterop.WMPLib.dllの二つのCOM Interop DLLを同梱しなければなりません。

.NET Framework 4には、COM Interop DLLなしでCOMコンポーネントを利用可能にするEmbedded Interop Types (相互運用機能型の埋め込み)があります。しかし、Windows Media Player Controlはこの方法に必要な要件を満たしていないので、利用すると以下のようなエラーになってしまいます。

アセンブリ 'Hoge\obj\Release\AxInterop.WMPLib.dll' に 'ImportedFromTypeLibAttribute' 属性または 'PrimaryInteropAssemblyAttribute' 属性が指定されていないため、このアセンブリから相互運用機能型を埋め込むことはできません
アセンブリ 'Hoge\obj\Release\AxInterop.WMPLib.dll' に 'GuidAttribute' 属性が指定されていないため、このアセンブリから相互運用機能型を埋め込むことはできません

この問題を解決するには、.NET Framework 4のdynamic型を使ってCOMコンポーネントを利用すればよいです。具体的には以下のように記述します。

private readonly dynamic _wmp = Activator.CreateInstance(Type.GetTypeFromProgID("WMPlayer.OCX.7"));

private void button1_Click(object sender, EventArgs e)
{
    _wmp.URL = soundFile;
    _wmp.controls.play();
}

これはDOBON.NETのWMPLib.WindowsMediaPlayerオブジェクトを使う例のオブジェクトの生成を、ActivatorによるCOMインスタンスの生成に置き換えたものです。音量の設定や各種イベントハンドラーの登録など、WindowsMediaPlayerオブジェクトとまったく同様に記述できます。この方法ではAxWMPLibとWMPLibの参照設定はいりません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away