什么可能导致我们的应用不起作用? C ++

时间:2011-10-05 05:55:28

标签: c++ winapi directshow

void CCaptureDlg::ListDevice()
{
    ((CComboBox *)GetDlgItem(IDC_COMBO_DEVICE))->ResetContent();
    HRESULT hr;
    IMoniker * pMoniker =NULL;
    ULONG cFetched;
    ICreateDevEnum * pDevEnum =NULL;

    hr = CoCreateInstance (CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
        IID_ICreateDevEnum, (void ** ) &pDevEnum);
    if (FAILED(hr))
    {
        AfxMessageBox("Couldn't create system enumerator!");
        return ;
    }

    IEnumMoniker * pClassEnum = NULL;

    hr = pDevEnum->CreateClassEnumerator (CLSID_VideoInputDeviceCategory, &pClassEnum, 0);
    //hr = pDevEnum->CreateClassEnumerator (CLSID_LegacyAmFilterCategory, &pClassEnum, 0);
    if (FAILED(hr))
    {
        AfxMessageBox("Couldn't create class enumerator!");
        pDevEnum->Release();
        return ;
    }

    if (pClassEnum == NULL)
    {
        AfxMessageBox("No video capture device was detected.");
        pDevEnum->Release();
        return ;
    }

    while(S_OK == (pClassEnum->Next (1, &pMoniker, &cFetched)))
    {
        IPropertyBag *pBag;
        hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag);
        if(SUCCEEDED(hr))
        {
            CString ss;
            VARIANT var;
            var.vt = VT_BSTR;
            hr = pBag->Read(L"FriendlyName", &var, NULL);
            if (SUCCEEDED(hr))
            {                
                ss.Format("%S",var.pbstrVal);
                ((CComboBox *)GetDlgItem(IDC_COMBO_DEVICE))->AddString(ss);
                SysFreeString(var.bstrVal);
            }
            pBag->Release();
        }
        pMoniker->Release();
    }

    pClassEnum->Release();
    pDevEnum->Release();

}

以上是我们应用程序的源代码,我们使用它来列出所有视频设备,但是这个应用程序在安装了Windows XP的某台机器上不起作用。它提示我们“无效的端口号”,有人可以告诉我可能的原因是什么?

1 个答案:

答案 0 :(得分:1)

我只能想到一个显示此错误消息的错误视频捕获设备,或您未提供的代码的其他部分。此代码段中没有任何内容可以执行此类提示。

如果你有一个奇怪的消息框,你可以做的调试是打破调试器而不关闭框并检查窗口调用堆栈,以便识别弹出消息的DLL ...