Что может заставить наше приложение не работать?C ++ - PullRequest
0 голосов
/ 05 октября 2011
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 Ответ

1 голос
/ 05 октября 2011

Я могу думать только о неисправном устройстве захвата видео, которое показывает это сообщение об ошибке, или другой части вашего кода, которую вы не предоставили.Здесь, в этом фрагменте кода, нет ничего, что могло бы сделать такую ​​подсказку.

Если у вас возникло странное окно сообщения, появляющееся из ниоткуда, вы можете отладить его с помощью отладчика, не закрывая окно, и проверьте окностек вызовов, чтобы определить DLL, которая выдает сообщение ...

...