我已经构建了一个实现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将不会调用析构函数。
如何为我的过滤器调用自定义析构函数?
答案 0 :(得分:4)
你不应该delete
COM对象,你应该Release()
他们。当引用计数降至0时,CSource
可能会将IUnknown::Release()
实现为delete this
。
答案 1 :(得分:0)
如果您已将过滤器添加到图表中,请在发布自己的参考文献之前忘记将其从图表中删除。