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的某台机器上不起作用。它提示我们“无效的端口号”,有人可以告诉我可能的原因是什么?
答案 0 :(得分:1)
我只能想到一个显示此错误消息的错误视频捕获设备,或您未提供的代码的其他部分。此代码段中没有任何内容可以执行此类提示。
如果你有一个奇怪的消息框,你可以做的调试是打破调试器而不关闭框并检查窗口调用堆栈,以便识别弹出消息的DLL ...