我现在用DirectShow来编程,我想做一个这样的函数,遍历IGraphBuilder中的每一个Filter,然后遍历这个Filter中的所有输入/输出Pin,断开Filter中的所有Pin,然后再释放掉IGraphBuilder中的Filter,这个函数应该有两个循环,一个是用来遍历IGraphBuilder中的Filter,再在这个循环中遍历这个Filter中的Pin,总之能断开所有Filter中的所有Pin和释放IGraphBuilder中的所有Filter就可以了,各位给点代码吧。
if(pGB)
{
pGB->Release();
}
if(pGB)
{
pGB->Release();
pGB = NULL;
}
哎,晕啊。 你要我重复多少次才能明白 “系统资源” 不是你能做的事,也不应该有你来做!
这段代码从设计到编写都是错误的。
如果你用了一个Filter, 那么你就要Release他,你不需要,也无法关心这个Filter下面有几个Pin, 上面有什么Graph,除非你也用到了他们。
做好你自己的事情就行了。
来个简单的代码实例吧:
1.
IFilter* pFilter;
QueryInterface(...&pFilter); //引用了该Filter
pFilter->doSomething(...)
...
pFilter->Release(). //释放该Filter
2.
IFilter* pFilter;
QueryInterface(..&pFilter); //引用Filter
IPin* pPin;
pFilter->QueryPin(...&pPin); //引用Pin
pPin->doSomething(..);
...
pPin->Release(); //释放Pin
pFilter->Release(); //释放Filter