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++
디버거를 단계별로 실행할 때 포트 번호 메시지와 함께 실패하는 행은 무엇입니까? –