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

标签 c++ com directshow destructor

我已经构建了一个实现 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/

相关文章:

c++ - 试图用 lambda 找到二维 vector 的最小元素

php - 如何在 PHP 中优化 Dijkstra 代码?

C++从流中提取 double

c# - 处理从 C++/MFC 应用程序中的 .NET dll 抛出的异常

c++ - 打印 STL 容器以进行批准测试的公约

c# - 从 C# 调用 VB DLL 上的方法

com - 使用 IPersistStream::Load 从 .GRF 文件加载 IFilterGraph 无法实例化使用 CoRegisterClassObject 注册的私有(private)进程内过滤器

delphi - 仅提供音频的 DirectShow 推送源过滤器的正确样本大小是多少?

c++ - 如何通过管道发送/接收具有复杂数据结构的数据?

c++ - Media Foundation 错误地将静止图像捕获流描述符标记为视频捕获