6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-01-06

.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の参照設定はいりません。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?