Search code examples
windowsvisual-c++comdirectshow

Initialize NullRender failed with error REGDB_E_CLASSNOTREG on Win2008 R2


My DirectShow application is working on Win7. When I switched it to Win2008 R2 server it failed to initialize NullRender filter with an error code -2147221164 (which is 0x80040154 REGDB_E_CLASSNOTREG "Class not registered").

HRESULT CDirectShowGraph::AddFilterToGraph(CComPtr<IBaseFilter>& spFilter, GUID filterGuid, LPCWSTR filterName)
    {   
        HRESULT hr = S_OK;   

    //Create the filter
    hr = spFilter.CoCreateInstance(filterGuid);

    if (FAILED(hr))
    {       
        CDirectShowGraph::Msg(TEXT("[CDirectShowGraph::AddFilterToGraph] Failed to initialize filter \"%s\" hr=0x%x"), filterName, hr);
        return hr;
    }

    //Add the filter to the graph
    if (FAILED(hr = m_spGraph->AddFilter(spFilter, filterName)))
    {
        CDirectShowGraph::Msg(TEXT("[CDirectShowGraph::AddFilterToGraph] Adding filter failed \"%s\" hr=0x%x"), filterName, hr);
        return hr;
    }
    return hr;
}

...

m_DirectShowGraph.AddFilterToGraph( m_spNullRenderer, CLSID_NullRenderer, L"NullRender")

I have also tried reinstalling Windows SDK.

Even GraphEdit crashes, when I expand the DirectShow Filters node. I tried DirectShowFilterManager (http://www.softella.com/dsfm/index.en.htm) and it also does not show NullRender in the list. However, on Win7 NullRender is appearing.


Solution

  • Microsoft took Null Renderer out of Win Server 2008 (along with other filters like Sample Grabber - all hosted by qedit.dll). You need to look for replacement, which, for example, can be a similar filter/sample in one of old Platform SDKs.

    See also: