为什么出现在graphedit上的filter我调用coCreateIntance这个函数去创建的时候失败。
更倒霉的是我graphedit提示的filename 找到对应文件去注册。注册成功了,但是还是不能创建,
这里显示对应的filter的dll(我想ax文件和dll文件都是可以注册的吧,我就用dll去注册)
这里注册显示注册成功,但是我创建该filter却是失败了,hr的返回值是“没有注册类”
下面是我的代码,希望有大牛帮我。
//OUR_GUID_ENTRY(CLSID_MPEG4s_decoder,
// 0x4a69e442,0x28be,0x4991, 0x96, 0x9c,0xb5, 0x00, 0xad ,0xf5,0xd8,0xa8);
这里是是创建代码:
BOOL pass=FALSE ;
if(!IsFilterRegistered(CLSID_MPEG4s_decoder))
pass = RegisterFilter(TEXT("C:\\Windows\\System32\\MP4SDECD.DLL"));
if(pass)
hr =AddFilterByClSID(pGraph,CLSID_MPEG4s_decoder,
TEXT("MPEG4s Decoder DMO"),&pMPEG4sDecoder);
if(FAILED(hr))
return FALSE ;
//一下是上面调用函数的实现
//注册代码:
BOOL CPlayer::RegisterFilter(LPCWSTR infilerAx)
{
typedef int (WINAPI *REGISTER_FUNC) (void);
REGISTER_FUNC myFunc = NULL ;
HMODULE hModule = ::LoadLibraryW(infilerAx);
if(hModule)
{
myFunc= (REGISTER_FUNC)GetProcAddress(hModule,"DllRegisterServer");
BOOL pass = (myFunc!=NULL);
if(pass)
myFunc();
::FreeLibrary(hModule);
return pass;
}
return FALSE ;
}
HRESULT CPlayer::AddFilterByClSID(
IFilterGraph *pfG,
const GUID & clsid,
LPCWSTR wszName,
IBaseFilter ** ppf)
{
if(!pfG || !ppf )
return E_POINTER ;
(*ppf) = 0 ;
IBaseFilter * pF =0 ;
HRESULT hr = CoCreateInstance(
clsid,
NULL,
CLSCTX_INPROC,
IID_IBaseFilter,
reinterpret_cast<void **>(&pF));
if(SUCCEEDED(hr))
{
hr = pfG->AddFilter(pF,wszName);
if(SUCCEEDED(hr))
*ppf=pF ;
else
pF->Release();
}
return hr ;
}