imediacontrol-> run在c ++中运行图形时返回E_ACCESSDENIED

时间:2013-12-10 18:47:22

标签: c++ com directshow

我正在尝试了解直接显示和过滤器。为此我已经下载了代码(from here)并且我能够在发布文件夹中运行它.exe。但现在当我尝试使用visual studio 2010运行时,请按照

行进行操作
hr = m_pMediaControl -> Run( ); 

返回E_ACCESSDENIED。我试图在互联网上找到答案,但没有得到任何东西。

2 个答案:

答案 0 :(得分:0)

此错误不典型,发生的情况是Filter Graph Manager无法执行一次内部任务,然后将错误代码从内部操作转发回调用者(您)。图中的一个过滤器可以报告其状态转换失败。

要解决此问题,您需要检查过滤器图形的拓扑,然后尝试删除某些过滤器,直到您消除错误。您将把问题隔离到特定的过滤器。

答案 1 :(得分:0)

如果应用程序在以一种方式而不是另一种方式运行时工作,那么它可能与访问执行它的目录有关,例如权限问题。例如,您可能有一个文件接收器试图写入当前目录?如果文件接收器无法写入其输出文件,则一旦调用E_ACCESSDENIED,它将返回错误,例如IMediaControl->Run()。所以 - 检查输出路径并确保您可以创建文件并写入该目录。

罗马指出,系统地逐个删除过滤器可能是隔离错误的最佳方法。将您创建的图形保存到GRF文件并使用GraphEdit进行检查可以非常有用,您可以在其中进行实验,或者在运行时注册对象并动态地使用图形。这两种技术都在MSDN上的DirectShow文档中进行了描述。