继续对embedded WindowsMediaPlayer problem进行调查,我试图通过DirectShow进程内服务器进行简单的文件播放:
::CoInitializeEx(0, COINIT_MULTITHREADED);
CComPtr<IGraphBuilder> spGraph;
spGraph.CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER);
CComQIPtr<IMediaControl> spMediaControl(spGraph);
// ... later:
spGraph->RenderFile(L"c:\\foo.wav", 0); // fails with VFW_E_BAD_KEY
spMediaControl->Run();
有趣的是,当在独立应用程序中进行测试时,这在我在(Windows XP 32和x64)上测试的两个系统上都可以正常运行。
但是,在我的实际用例中,它失败了,这是一个基于NPAPI的浏览器插件-即将DLL加载到Firefox / Chrome / Opera中。
有谁知道这里可能出什么问题吗?
或关于其他尝试的想法?
更新:还询问了Microsoft forums。
更新2:
IGraphBuilder::AddSourceFilter(path,path,&base)
已因以下注册表调用而失败(如进程监视器中所示):“RegOpenKey”,“HKCU \ Software \ Classes \ c”,“未找到名称”,“所需访问权限:查询值,允许的最大值”
“RegOpenKey”,“HKCU \ Software \ Classes \ Media Type \ Extensions \ .wav”,“未找到名称”,“所需访问权限:读取”
“RegOpenKey”,“HKCU \ Software \ Classes \ Media Type”,“未找到名称”,“所需访问权限:读取”
最佳答案
它正在从错误的配置单元读取密钥。它应该使用HKLM,而不是HKCU。最可能的原因是registry virtualization.
关于c++ - IGraphBuilder::RenderFile()失败,出现VFW_E_BAD_KEY-0x800403f2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1963241/