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的某台计算机上不起作用。它会提示我们“无效的端口号”,有人可以告诉我可能的原因是什么?什么可能导致我们的应用程序无法工作? C++
当使用调试器进行调试时,哪条线路因端口号消息而失败? –