扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:longway 来源:天极开发 2007年10月16日
关键字: VC DirectShow 视频 图片处理
// 定义 DllGetClassObject 函数的指针 typedef HRESULT (CALLBACK *lpDllGetClassObject)(REFCLSID,REFCLSID,void**); HRESULT lwGetClassObject(HMODULE hLib,const CLSID& clsid,const CLSID& riid,void** ppv) { // 装入和卸载dll由用户执行,以免后来忘记了卸载dll HRESULT hr; if(!hLib){ // dll没有装载成功 hr = E_FAIL; return hr; } lpDllGetClassObject lwDGCO = NULL; lwDGCO =(lpDllGetClassObject)GetProcAddress(hLib,"DllGetClassObject"); if(!lwDGCO){ // 查找函数失败 hr = E_FAIL; return hr; } IClassFactory* pCF = NULL; hr = lwDGCO(clsid,IID_IClassFactory,(void**)&pCF); if(!pCF){ // 获取类厂失败 return hr; } hr = pCF->CreateInstance(NULL,riid,ppv); if(!ppv) hr = E_FAIL; pCF->Release(); return hr; } |
// 类成员的定义,要包含“IVRControl.h”文件 IGraphBuilder* m_pGB; // Filter Graph IBaseFilter* m_pFVR; // 自写的 Filter IVRControl* m_pVRControl; // 接口 HMODULE m_hLib; // dll 库的句柄 |
m_hLib = LoadLibrary("VR.dll"); // 载入 dll,“VR.dll”要和程序在同一目录 |
HRESULT hr; // 创建 Filter Graph hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(void**)&m_pGB); if(FAILED(hr)){ return hr; } // 调用上面的函数从已载入的 dll 中获取自写的 Filter hr = lwGetClassObject(m_hLib,CLSID_lwVideoRenderer,IID_IBaseFilter,(void**)&m_pFVR); if(FAILED(hr)){ return hr; } // 询问接口 hr = m_pFVR->QueryInterface(IID_IVRControl,(void**)&m_pVRControl); if(FAILED(hr)){ return hr; } // 把 Filter 加入 Filter Graph hr = m_pGB->AddFilter(m_pFVR,L"VideoRenderer"); if(FAILED(hr)){ return hr; } |
if(m_hLib){ // 确认成功载入了 dll FreeLibrary(m_hLib);// 卸载 dll } |
HRESULT CDSControl::SetFun(pProcFun pPF) { if(m_pVRControl){ return m_pVRControl->SetFun(pPF); } return E_FAIL; } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者