我已经构建了一个实现 CSource 的自定义 DirectShow 过滤器,例如
class Myfilter : public CSource
{
~MyFilter(){ delete everything;}
}
当我在GraphStudio中使用这个过滤器时,我可以正确地删除它,正确调用析构函数。
当我通过 COM instaciation 创建我的过滤器时,我不能再用 delete 删除它
IBaseFilter *pFilter = NULL;
HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pFilter));
然后delete pFilter不会调用析构函数。
如何为过滤器调用自定义析构函数?
最佳答案
您不应该删除
COM 对象,您应该Release()
他们。 CSource
可能将 IUnknown::Release()
实现为 delete this
,当引用计数下降到 0 时。
关于c++ - 删除 DirectShow 过滤器(未调用析构函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399779/