我正在开发一个 DirectShow CSource 捕获过滤器。它工作正常,但是当我关闭使用过滤器的程序时(在这种情况下,我正在使用 VLC 进行测试,但其他程序也会发生同样的情况),程序崩溃(如果我在 Visual Studio 中调试它,那么断点被触发)。
我一直在寻找这个问题一段时间,发现我的源过滤器和源流都没有被释放;也就是说,它们的引用计数器在程序结束时为 1,DllCanUnloadNow() 函数报告有 2 个对象仍在使用中,并且当调用 CoUninitialize() 时,程序崩溃。
我很确定引用计数器得到了正确处理,因为我使用的是基类实现。我能想到的软件中唯一不寻常的事情是我使用的是我自己的 DllGetClassObject() 版本:我将 .DEF 文件配置为导出 MyDllGetClassObject() 而不是 DllGetClassObject(),因此我可以在之前插入一些代码调用默认实现。我认为这不是问题,因为我检查了在 MyDllGetClassObject() 末尾返回的所有对象的引用计数器是否为 1。
我想我错过了关于过滤器生命周期的一些东西,但不知道是什么(这是我正在开发的第一个捕获过滤器)。有什么建议吗?
先感谢您,
吉列尔莫