自己写了一个关于视频的程序,我使用了两种摄像头,一个是CIF 352*288的,另一个是CIF 640*480. 编译工具是Microsoft Visual Studio .NET 2003。
以下是一小段出错的代码:
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,IID_ICreateDevEnum,
reinterpret_cast < void ** > (&pDevEnum));
hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0);
if (hr == S_OK)
{
while (pEnum->Next(1, &pMoniker, NULL) == S_OK)
{
hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void **)&pFilter);
if (SUCCEEDED(hr))
{
hr = pGraph->AddFilter(pFilter, L"Capture Filter");
if (SUCCEEDED(hr))
break;
}
pPropBag->Release();
}
pMoniker->Release();
}
在使用CIF 352*288这个摄像头时,程序可以正常运行;在使用CIF 640*480这个摄像头时,当程序运行到“hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void **)&pFilter);”这个地方时就会出现异常,说“ 0x7c92eb74 处未处理的异常: 0xC0000008: 指定无效的句柄。”
不知怎么会出现这样的问题,其他的都没变,只是换了一个摄像头就出现这样的问题了。请大家帮忙分析一下!
以下是一小段出错的代码:
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,IID_ICreateDevEnum,
reinterpret_cast < void ** > (&pDevEnum));
hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0);
if (hr == S_OK)
{
while (pEnum->Next(1, &pMoniker, NULL) == S_OK)
{
hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void **)&pFilter);
if (SUCCEEDED(hr))
{
hr = pGraph->AddFilter(pFilter, L"Capture Filter");
if (SUCCEEDED(hr))
break;
}
pPropBag->Release();
}
pMoniker->Release();
}
在使用CIF 352*288这个摄像头时,程序可以正常运行;在使用CIF 640*480这个摄像头时,当程序运行到“hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void **)&pFilter);”这个地方时就会出现异常,说“ 0x7c92eb74 处未处理的异常: 0xC0000008: 指定无效的句柄。”
不知怎么会出现这样的问题,其他的都没变,只是换了一个摄像头就出现这样的问题了。请大家帮忙分析一下!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货