对于.NET,要进行多媒体以及Flash的播放都是相当简单的,Microsoft帮我们完成了很多的功能,我们直接拿来使用就行了,但是对于ActiveX控件的使用,应注意下系统生成了什么,不多说直接开始。下面的例子以C#为例,其实其他的语言都差不多。
需要用到AxInterop.WMPLib.dll(播放多媒体)AxInterop.ShockwaveFlashObjects.dll(Flash)这两个.dll文件(在用WMP时还会用到Wmp.dll,这等会再说)。
简单的使用办法就是在窗口设计器界面的工具箱内,添加新的工具项(右键点击工具箱,点击“选择项”),然后选择Com组件,在里面找那个Windows Media Player,打上勾确定,就可以增加Windows Media Player控件到控件箱了。拖动此控件放置到设计器上,这样就在你的程序里嵌入Windows Media Player了。是不是非常简单。
刚才我用利用拖动向设计器中增加了一个WMP,那到底Windows帮我们做了那些事呢?
首先,在我们的项目引用中增加了2个引用"AxInterop.WMPLib"和"WMPLib",然后在我们的代码中增加了一点代码
AxWMPLib.AxWindowsMediaPlayer wmp = new AxWMPLib.AxWindowsMediaPlayer();
此时我们可以清楚的看到使用的是那个类,这个类就是属于AxInterop.WMPLib中的。他提供了对于此播放器的实例与属性配置。wmp.Url即需要播放的文件路径(相关信息可以参考MSDN中的说明)。
那如何在代码中控制其运行呢,这就要用到另外一个Dll了,wmp.Ctlcontrols是AxWindowsMediaPlayer已经集成好的一个类,它集成自IWMPControls,能完成Play,Pause,Stop等等功能。我们可以使用
wmp.Ctlcontrols.stop();
wmp.CtlControls.Play();
来控制。
以上的内容都比较简单,直接使用已经封装好的控件。
实际上,我们可以自己写个控件实现,最简单的当然就是在刚才做好的wmp基础上进行修改。
另外,还有一个类可以提供我们简单的使用WMPLib.WindowsMediaPlayerClass。
另外在使用这种COM组件的时候,需要注意一个问题,当我们自己去实例化AxWMPLib.AxWindowsMediaPlayer,并添加此控件时,经常容易遗漏一点。比如以下这样的代码就会出错。
AxWMPLib.AxWindowsMediaPlayer wmp = new AxWMPLib.AxWindowsMediaPlayer();
wmp.Enabled = true;
wmp.Location = new System.Drawing.Point( 0, 0 );
wmp.Name = "wmp";
wmp.Size = new System.Drawing.Size( 250, 200 );
wmp.TabIndex = 0;
this.panel.Controls.Add( wmp );
wmp.URL = Application.StartupPath + "/papers/" + src;
此时一旦给其属性URL赋值,那么就会马上出现错误:Exception of type ''System.Windows.Forms.AxHost+InvalidActiveXStateException'' was thrown.其实,这是由于Wmp组件尚未初始化完成,就开始对其赋值的原因。
当我们用拖动方式向其中增加时,我们仔细查看其中的代码可以发现,另外还存在几行代码,
( ( System.ComponentModel.ISupportInitialize )( wmp ) ).BeginInit();
( ( System.ComponentModel.ISupportInitialize )( wmp ) ).EndInit();
只有当我们完成( ( System.ComponentModel.ISupportInitialize )( wmp ) ).EndInit()之后,才能为其文件赋值。
播放AxInterop.ShockwaveFlashObjects.dll要简单得多,直接引用这个类库就可以了,不过这个类库在本地一般不那么容易找到,而且还存在版本问题,建议直接去网上下载一个,拿来使用就可以了,使用方法也差不多,同样注意一下需要EndInit()之后才能给文件地址flash.Media赋值才不会出现报错。
最后,其实,在用过很多ActiveX控件后,你会发现每个ActiveX都会有这样的情况,ocx的使用中会用到.resx文件中的内容,具体的情况参照关于ActiveX的文章。
文章出处:飞诺网(http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/200853/112388.html)