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

发布于 2024-11-16 03:24:31 字数 493 浏览 3 评论 0原文

我构建了一个实现 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));

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

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

I have built a custom DirectShow filter that implements CSource such as

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

When I use this filter in GraphStudio, I can delete it properly, the destructor is called correctly.

When I create my filter via COM instaciation, I can no longer delete it with delete

IBaseFilter *pFilter = NULL;

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

then delete pFilter will not call the destructor.

How can I call my custom destructor for my filter?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

因为看清所以看轻 2024-11-23 03:24:31

您不应该删除 COM 对象,您应该Release() 它们。当引用计数降至 0 时,CSource 可能会实现 IUnknown::Release() 作为删除此

You're not supposed to delete COM objects, you should Release() them. CSource probably implements IUnknown::Release() as delete this, when the reference count drops to 0.

万劫不复 2024-11-23 03:24:31

如果您已将过滤器添加到图表中,请不要忘记在完成后将其从图表中删除,然后再发布您自己的引用。

If you've added your filter to a graph, don't forget to remove it from the graph when you're done before releasing your own references.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文