用动态加载的方式使用未注册的Filter

来源:互联网 发布:网络安全工程师专业 编辑:程序博客网 时间:2024/05/21 20:27

 用动态加载的方式使用未注册的Filter 收藏 
一般来说,在dshow程序里,要使用Filter,首先要把Filter注册,然后通过CLSID来调用,然而像暴风影音那样,他使用了大量第三方filter,但这些filter都没有注册,那他是怎么做的呢。

其实他是用了动态加载的方式,.ax的Filter本身其实就是个dll,所以当然能够直接动态加载。

直接上代码吧,如要在dshow中加入一个未注册的ffdshow video decoder

typedef int (WINAPI *PROC_DllGetClassObject)(REFCLSID rclsid, REFIID riid, LPVOID FAR* ppv);

PROC_DllGetClassObject g_PROC_DllGetClassObject = NULL;

IBaseFilter *pFFDshow = NULL;

IClassFactory *pClassFactory = NULL;

HMODULE   hInstLibrary = LoadLibrary(L"ffdshow.ax");

if (hInstLibrary )

{

g_PROC_DllGetClassObject = (PROC_DllGetClassObject)GetProcAddress(hInstLibrary,"DllGetClassObject");

if(g_PROC_DllGetClassObject)

{

g_PROC_DllGetClassObject(CLSID_FFDshow,IID_IClassFactory,(void**)&pClassFactory);

pClassFactory->CreateInstance(0,IID_IBaseFilter, reinterpret_cast<void**>(&pFFDshow));

m_FilterGraph->AddFilter(pFFDshow,L"ffdshow video decode");

SAFE_RELEASE(pFFDshow);


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mjh1021/archive/2010/04/09/5468150.aspx

原创粉丝点击