这两天写的一个DShow的东东,在退出的时候,释放总有问题。
IGraphBuilder->Release(),会死在这句话!
一开始,认为可能是引用计数的问题,于是,就仔细查找。
查找的过程,总是进步和过程,也是因为此,我弄清楚了引用计数的添删。
1。如果使用CComPtr<IXXX> pXXX,则在 pXXX = pXXX2 的时候,引用计数会加1。
2。CoCreateInterface和QueryInterface时,如果成功,则引用计数会加1。
3。如果用用IXXX * pXXX,则在 pXXX= pXXX2 的时候,引用计数不变。
4。如果用进程内Filter,刚在pXXX = new CXXX() 的时候,引用计数不增加,为0。
在这个过程中,还找到了一个错误,也就解决了IGraphBuilder->Release()的问题,
那就是在写Filter的过程中,对于CBaseFilter::Stop的重载中,要确保每一个返回处,
都要调用 return CBaseFilter::Stop()
本文探讨了在DirectShow(DShow)中IGraphBuilder释放时遇到的问题,并详细介绍了如何通过确保CBaseFilter::Stop的正确实现来解决这个问题。此外,还讲解了COM对象引用计数的管理原则。
6672

被折叠的 条评论
为什么被折叠?



