C++ graph builder未发布,渲染在后台

C++ graph builder未发布,渲染在后台,c++,windows,winapi,visual-c++,directshow,C++,Windows,Winapi,Visual C++,Directshow,我的应用程序出现了一些问题 我制作了一个应用程序,可以检测可用的网络摄像头并渲染它们 我们可以随时从一个摄像头切换到另一个摄像头 但问题是,当我切换时,新渲染显示为主流,而旧选择的网络摄像头显示在背景中 以下是显示问题的图像: 我所做的是发布graphbuilder,并使用新的过滤器重新构建它。它可以工作,但我对这种逻辑不满意 MessageBox(NULL,"this is the reload","",NULL); if(this->videoFilter){ this->v

我的应用程序出现了一些问题 我制作了一个应用程序,可以检测可用的网络摄像头并渲染它们 我们可以随时从一个摄像头切换到另一个摄像头 但问题是,当我切换时,新渲染显示为主流,而旧选择的网络摄像头显示在背景中

以下是显示问题的图像:

我所做的是发布graphbuilder,并使用新的过滤器重新构建它。它可以工作,但我对这种逻辑不满意

MessageBox(NULL,"this is the reload","",NULL);
if(this->videoFilter){  this->videoFilter->Release();   this->videoFilter=NULL; }
if(this->mediaEvent){   this->mediaEvent->Release(); this->mediaEvent=NULL;     }
if(this->videoWindow){  this->videoWindow->Release(); this->videoFilter=NULL;   }
if(this->mediaControl){ this->mediaControl->Release(); this->mediaControl=NULL; }
    // and reallocate them 

您没有从图表中删除过滤器。释放它们并不意味着移除。

问题:是否有其他方法!!你停止旧的过滤图了吗?使用
Release
不会破坏过滤器,只会破坏对它的引用。COM对象是引用计数对象,仅当引用计数器为0时才释放!如果不销毁过滤器图,过滤器仍在图中并具有引用。为了更好地了解过滤器图中发生的情况,可以在RunningObjectTable()中注册图然后用GraphEdit或GraphStudionText连接到您的图形。是的,我已经停止了它,但相同的结果我确实做了,因为这个过滤器和其他过滤器之间有很多依赖关系,所以当我删除它时,应用程序会崩溃,windows会停止在MessageBox中显示丑陋内容的进程