Entfernen Sie alle Filter im Graph

Am einfachsten können Sie alle Filter in einem Filterdiagramm entfernen, indem Sie einfach den Filter Graph Manager veröffentlichen und einen neuen erstellen. Stellen Sie sicher, dass Sie jeden Zeiger, den Ihre Anwendung hat, auf schnittstellen der Filter-Graph-Manager sowie Zeiger auf Objekte im Diagramm, einschließlich Filtern, Stecknadeln, der Referenzuhr usw. frei geben.

Alternativ können Sie die Filter nach und nach mithilfe der IFilterGraph::RemoveFilter-Methode entfernen:

// Stop the graph.
pControl->Stop();

// Enumerate the filters in the graph.
IEnumFilters *pEnum = NULL;
HRESULT hr = pGraph->EnumFilters(&pEnum);
if (SUCCEEDED(hr))
{
    IBaseFilter *pFilter = NULL;
    while (S_OK == pEnum->Next(1, &pFilter, NULL))
     {
         // Remove the filter.
         pGraph->RemoveFilter(pFilter);
         // Reset the enumerator.
         pEnum->Reset();
         pFilter->Release();
    }
    pEnum->Release();
}

In diesem Beispiel wird die IFilterGraph::EnumFilters-Methode verwendet, um die Filter im Diagramm zu aufzählen. Das Entfernen eines Filters führt dazu, dass das Enumeratorobjekt nicht mehr mit dem Diagramm synchron ist. Verwenden Sie die IEnumFilters::Reset-Methode, um den Enumerator zurückzusetzen. Andernfalls wird jeder nachfolgende Aufruf von IEnumFilters::Next fehlschlagen.