您的位置:首页 > 其它

近日心得(Com, directshow)

2007-10-11 13:01 218 查看
这两天写的一个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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: