DirectX pEnum->Next(1,&pPin,NULL) 返回S_FALSE

DirectX pEnum->Next(1,&pPin,NULL) returns S_FALSE

本文关键字:NULL 返回 FALSE pPin gt pEnum- Next DirectX      更新时间:2023-10-16

我已经建立了USB电视调谐器在图形编辑和它的工作良好的graphhedit过滤器。

当我将其转换为c++代码时,对于电视调谐器滤波器似乎可以,因为我通过调用 pEnum->Next(1,&pPin,NULL) 获得引脚连接,但对于USB电视音频接口,我无法找到引脚,因为我总是获得S_FALSE呼叫pEnum->Next(1,&pPin,NULL)

我在不同的网站上看到过一些帖子,告诉人们需要使用枚举,但没有给出例子。此外,我也无法理解为什么调谐器滤波器引脚可以在同一设备上访问,而其他设备则不能。这是我的代码。请告诉我如何更改它为枚举。

  HRESULT hr=S_OK;
    CComPtr<ICaptureGraphBuilder2> pBuilder;
    hr=pBuilder.CoCreateInstance(CLSID_CaptureGraphBuilder2);
    hr=pBuilder->SetFiltergraph(pGraph);
    //now add tuner
    CComPtr<IBaseFilter> pGadmeiAnalogTvTuner0001;
    hr=pGadmeiAnalogTvTuner0001.CoCreateInstance(CLSID_GadmeiAnalogTvTuner0001);
    if(hr<0) 
        return -1;
    hr=pGraph->AddFilter(pGadmeiAnalogTvTuner0001,L"Gadmei Analog TvTuner 0001");
    if(hr!=S_OK)
        return -1;
    printf("added tuner to graph n");
    //now add tv audio
    CComPtr<IBaseFilter> pGadmeiAnalogTvAudiof;
    hr=pGadmeiAnalogTvAudiof.CoCreateInstance(CLSID_GadmeiAnalogTvAudio);
    if(hr<0) 
        return -1;
    hr=pGraph->AddFilter(pGadmeiAnalogTvAudiof,L"GadmeiAnalogTvAudio");
    if(hr!=S_OK)
        return -1;
    printf("added Tv Audio to graph n");
    //connect tv tuner and audio
    hr=pGraph->ConnectDirect(GetPin(pGadmeiAnalogTvTuner0001,L"Analog Audio"), GetPin(pGadmeiAnalogTvAudiof,L"TVAudio In"),NULL);
    if(hr!=S_OK)
        printf("Can't Connect n");

捕获过滤器是通过枚举器创建的,它们在适当的上下文中实例化。CoCreateInstanceCLSID为您提供了一个包装器对象,而没有将其绑定到感兴趣的硬件,然后您就有了有效接口指针的典型症状,但是没有引脚可用。