[转载]在MFC窗口中嵌入VLC ActiveX控件

时间:2022-09-29 10:13:42
经过一番的google和折腾,终于把VLC ActiveX控件嵌入MFC窗口并实现简单的视频播放了,虽然发现很多问题(比如vlc参数设置[注1],程序关闭后进程不结束等等),觉得最终可能还是会选择libvlc或者activeX+C#,不过还是记录一下过程,如果你真要这么做的话。

环境:VC8.0,Windows XP SP3,VLC 1.1.11 ActiveX v2

step1. 新建一个基于对话框的MFC exe工程
step2. 从资源视图打开主对话框,鼠标右键客户区域,选择“插入ActiveX控件”: [转载]在MFC窗口中嵌入VLC ActiveX控件

从弹出窗口中找到“VideoLAN VLC ActiveX Plugin v2”,确定:
[转载]在MFC窗口中嵌入VLC ActiveX控件

step3. 调整新加入控件至合适大小,右键,选择“添加变量”,变量名设置为vlcCtrl:
[转载]在MFC窗口中嵌入VLC ActiveX控件
添加变量后,类视图中增加了CVlcplugin1,解决方案视图中也相应增加了CVlcplugin1.h和CVlcplugin1.cpp文件

step4. 在主窗口类的实现文件中添加#import "C:\Program Files\VideoLAN\VLC\axvlc.dll",编译时IDE会从中生成.tlh文件,包含了调用控件的接口信息

step5. 执行第一次编译,会出现VLCPlayListInsert、VLCPlayListXXX。。。重定义错误,打开CVlcplugin1.h,注释掉其中重定义的部分

step6. 执行第二次编译,还是会出现VLCPlayListInsert、VLCPlayListXXX。。。重定义错误,不过这次是在axvlc.tlh中,这是IDE从axvlc.dll生成的信息,无法直接修改,通过exclude选项忽略该错误:
#import "C:\Program Files\VideoLAN\VLC\axvlc.dll" exclude("VLCPlaylistMode")
再次编译就没有错误了。

step7. 为修改确定按钮的单击事件响应函数为:
void  CvlcActiveXv2TestDlg::OnBnClickedOk()
{
    AXVLC::IVLCPlaylistPtr plo(reinterpret_cast
< AXVLC::IVLCPlaylist *> (vlcCtrl.get_playlist()),  false );
    plo
-> add( " sample.avi " );
    plo
-> play();
}

编译运行:
[转载]在MFC窗口中嵌入VLC ActiveX控件