网站建设空间是指什么,网络推广策划,Wordpress图墙主题,广州网站建设好公司简单介绍MFC调用libvlc.dll作一个简单的播放器#xff0c;抛砖引玉#xff0c;各位VC达人继续深入研究#xff0c;Jeremiah对VC确实不太感兴趣#xff0c;所以就不做太深入的研究了。2009.10.29修改#xff1a;加入clip_children属性设置。参开第1步。环境#xff1a; …简单介绍MFC调用libvlc.dll作一个简单的播放器抛砖引玉各位VC达人继续深入研究Jeremiah对VC确实不太感兴趣所以就不做太深入的研究了。 2009.10.29修改加入clip_children属性设置。参开第1步。 环境 1) VC6SP5 2)vlc-0.9.9a 0. 引言 根据上一篇博客的研究任何一个VC环境都可以调用MinGW/Gcc编译得到的libvlc.dll。VLC在编译打包之后也就是执行完makepackage-win32-base或者去官网下载zip包解压之后或者是安装完VLC之后在vlc-0.9.9a目录下有个sdk文件夹里面又包含两个文件夹include头文件及lib库。这些都是我们用MFC调用libvlc.dll所必须的。头文件没啥好说的库里面的libvlc.dll.a及libvlccore.dll.a就是上一篇博客所说的静态库我们分别手动改成libvlc.lib及libvlccore.lib就可以在VC环境中调用啦。下面简要说一下调用的过程对各位VC达人来说绝对是小菜一碟。 1. 建立工程 新建MFCAppWizard(exe)工程名字为MFCVLC。选择项目为Dialogbased点击完成。删除Dialog窗体上的所有的控件包括“确定”、“取消”按钮及TODO静态文本。勾选窗口的clip_children属性这样就会避免拖动、最大化最小化及全屏还原时找不到图像的缺陷。 2. 画控件 画四个控件两个静态文本框一个输入框一个按钮。其中第一个静态文本框修改Caption为“路径”第二个文本框为视频的显示区域所以讲ID改为IDC_DISPLAYCaption去掉。输入框关联一个变量CString类型命名为m_path。按钮的Caption改为“播放”并为BN_CLICKED增加一个Function。在CMFCVLCdlg的构造方法中加入一下语句方便调试。 m_path _T(d:/01.avi);// 输入常用的视频地址 3.拷贝vlc的相关库及头文件 在资源管理器的MFCVLC工程目录下新建文件夹vlclib将vlc-0.9.9a/sdk/include/vlc.h拷贝到MFCVLC工程目录下将vlc-0.9.9a/sdk/include除了vlc.h之外的所有文件拷贝到vlc目录下将vlc-0.9.9a/sdk/lib下的libvlc.dll.a及libvlccore.dll.a拷贝到lib下并分别修改为libvlc.lib及libvlccore.lib。将vlc-0.9.9a目录下的libvlc.dll, libvlccore.dll,plugins目录拷贝到Debug目录下。如果有Cygwin环境需要将stdint.h/usr/include/stdint.h这个头文件也拷贝到MFCVLC工程目录下。在VC6环境中FileView中新建文件夹及导入上述文件最后入下图所示。 4. 修改头文件 1) 修改vlc.h将所有的#include***改为 #include *** 2)修改stdint.h将所有的long long替换为__int64 3)修改libvlc_structures.h#includestdint.h为#includestdint.h 5. 编写代码 在MFCVLCDlg.cpp中加入头文件导入。 #include vlc.h 在button的onclick关联函数中加入代码 voidCMFCVLCDlg::OnButton1() { //TODO: Add your control notification handler code here char path[100]; this-GetDlgItemText(IDC_EDIT1,path, 100); libvlc_exception_tex; libvlc_exception_init(ex); int vlc_argc 0; char *vlc_argv[100]; vlc_argv[vlc_argc] --ignore-config; libvlc_instance_t*p_instance libvlc_new( vlc_argc,vlc_argv, ex); libvlc_media_t *p_media libvlc_media_new( p_instance,path, ex); libvlc_media_player_t*p_media_player libvlc_media_player_new_from_media( p_media,ex); libvlc_drawable_t hwnd (libvlc_drawable_t)this-GetDlgItem(IDC_DISPLAY)-GetSafeHwnd(); libvlc_media_player_set_drawable(p_media_player, hwnd,ex); libvlc_media_player_play(p_media_player,ex); } 6. 关联静态库及编译运行 打开ProjectSetting在link标签的Object/library modules:下输入lib/libvlc.liblib/libvlccore.lib。 build项目应该没有错误。 Execute Program就可以执行了。 7. 一个BUG 第6步执行的是Execute模式如果是Debug模式点击“播放”后后台会显示加载的vlc的plugins的dll的信息但是加载完最后一个dll的时候程序就Block住了。暂时不晓得为啥。经过更多的测试win2003虚拟机里的vc6发现Jeremiah的VC6可能真的有问题debug的时候打开Output窗口显示加载的dll的情况就会block住。不打开Output窗口偶尔会set_drawable不成功弹出新窗口。其他几位朋友测试则正常。 8. 用VC6以上版本调试结果 Jeremiah使用了vs2003及vs2005。 1) 会两个重复定义的错误解决方法是将stdint.h中注释掉 #ifndef __intptr_t_defined #define __intptr_t_defined //typedef longintptr_t; #endif //typedef unsigned longuintptr_t; 2)发布Release版本会报内存错误。具体原因待查应该是.lib不兼容的问题。不知道为啥Debug版就可以而Release版就不行。解决方法是用dll2lib.exe附件提供将0.9.9a的libvlc.dll及libvlccore.dll转换为相应的lib库替换工程的lib/下面的相应的库然后再次Release即可。 Jeremiah对MFC只有一点点了解所以上述的各个过程如果重复烦琐及如何修复第78步讲的BUG及问题请各位VC达人指导Jeremiah。先谢过。本文附件中提供了MFCVLC的源码只是需要把vlc-0.9.9a的libvlc.dll,libvlccore.dll, plugins目录拷贝到Debug目录下就可以编译执行。需要的自己下载添加调试。