自己写了一个关于视频的程序,我使用了两种摄像头,一个是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: 指定无效的句柄。”
不知怎么会出现这样的问题,其他的都没变,只是换了一个摄像头就出现这样的问题了。请大家帮忙分析一下!