删除DirectShow过滤器(未调用析构函数)

时间:2011-06-19 00:29:11

标签: c++ com directshow destructor

我已经构建了一个实现CSource的自定义DirectShow过滤器,例如

class Myfilter : public CSource
{
   ~MyFilter(){ delete everything;}
}

当我在GraphStudio中使用此过滤器时,我可以正确删除它,正确调用析构函数。

当我通过COM instaciation创建我的过滤器时,我无法再删除它

IBaseFilter *pFilter = NULL;

HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, 
                              IID_PPV_ARGS(&pFilter));

然后删除pFilter将不会调用析构函数。

如何为我的过滤器调用自定义析构函数?

2 个答案:

答案 0 :(得分:4)

你不应该delete COM对象,你应该Release()他们。当引用计数降至0时,CSource可能会将IUnknown::Release()实现为delete this

答案 1 :(得分:0)

如果您已将过滤器添加到图表中,请在发布自己的参考文献之前忘记将其从图表中删除。