Wince系统Filter的注册,代码如下:
- STDAPI DllRegisterServer()
- {
- HRESULT hr= AMovieDllRegisterServer2(TRUE);
- return hr;
- }
通过这个注册,COm的信息注册进去了,可以在程序里面创建Com 接口。但是pin 的信息没有注册进去,智能链接的时候没效。
通过查看 Directshow 的AMovieDllRegisterServer2代码发现确实只是注册了com信息,没有注册pin信息。解决方法:
一、自己创建注册表文件,然后用注册表导入工具经信息导入。
有点麻烦,需要对filter的注册信息了解,需要做注册表导入工具。
二、使用Directshow的CLSID_FilterMapper 来导入pin信息,代码如下:
- STDAPI DllRegisterServer()
- {
- HRESULT hr= AMovieDllRegisterServer2(TRUE);
- RegisterAllPin();
- return hr;
- }
- BOOL RegisterAllPin()
- {
- CoInitialize(NULL);
- HRESULT hr=E_FAIL;
- IFilterMapper *pIFM = 0;
- hr = CoCreateInstance(
- CLSID_FilterMapper,
- NULL,
- CLSCTX_INPROC_SERVER,
- IID_IFilterMapper,
- (void **)&pIFM);
- if(FAILED(hr))
- {
- printf("Get FilterMapper fail/r/n");
- return FALSE;
- }
- printf("Get FilterMapper Success/r/n");
- for( int i = 0; i < g_cTemplates; i++ )
- {
- // get i'th template const CFactoryTemplate *pT = &g_Templates[i];
- if( NULL != pT->m_pAMovieSetup_Filter )
- {
- hr = AMovieSetupRegisterFilter( pT->m_pAMovieSetup_Filter, pIFM, TRUE );
- printf("Get AMovieSetupRegisterFilter /r/n");
- }
- // check final error for this pass
- // and break loop if we failed
- //
- if( FAILED(hr) )
- break;
- }
- CoUninitialize();
- return TRUE;
- }
这样以后就可以把pin的信息导入到注册表里面去了,可以实现filter的智能链接了。