Windows mobile DirectShow视频捕获筛选器-IPersistPropertyBag::Load()返回E_ENVALIDARG

Windows mobile DirectShow视频捕获筛选器-IPersistPropertyBag::Load()返回E_ENVALIDARG,windows-mobile,directshow,video-capture,Windows Mobile,Directshow,Video Capture,这件事快把我逼疯了 Windows Mobile 6示例CameraCapture在所有测试的WM 6设备上都能正常工作。 我在一个大型复杂程序中添加了相同的图形结构。在某些设备上,CLSID_VideoCapture筛选器无法通过IPersistPropertyBag::Load()接口调用接受摄像机名称,并返回E_INVALIDARG(0x80070057) 我的程序在一个WM 6.5设备上运行良好,因此我认为摄像机名称正确地传递到了过滤器。似乎存在一些外部冲突,阻止相机与某些设备上的过滤器

这件事快把我逼疯了

Windows Mobile 6示例CameraCapture在所有测试的WM 6设备上都能正常工作。 我在一个大型复杂程序中添加了相同的图形结构。在某些设备上,CLSID_VideoCapture筛选器无法通过IPersistPropertyBag::Load()接口调用接受摄像机名称,并返回E_INVALIDARG(0x80070057)

我的程序在一个WM 6.5设备上运行良好,因此我认为摄像机名称正确地传递到了过滤器。似乎存在一些外部冲突,阻止相机与某些设备上的过滤器关联。WM 6.1和WM 6.5设备均出现故障

我已经检查过很多次了,但没有发现琐碎的示例CameraCapture(始终有效)和我的复杂程序(仅在一台设备上有效)之间有任何值得谴责的区别。以下是一些更详细的信息:

  • 所有工作都在主线程上完成(CameraCapture使用辅助线程,但如果在主线程上完成图形构造,则其行为相同)
  • E_INVALIDARG未作为IPersistPropertyBag::Load()的可能返回值列出。我认为错误来自相机初始化的某些内部方面
  • 如果我传递了一个错误的摄像头名称,如“CAM”,我会得到0x80070002,“未找到设备/文件”。由于包中没有名字,我得到0x8007000d“数据无效”
  • 我已经为Load(&PropBag,&ErrorLog)实现了一个CErrorLog,并且在Load()期间从未调用过它,因此没有更多可用的详细信息
  • 两个程序之间的编译和链接设置大致相同
  • 两个程序都使用CoInitializeX(NULL,Conit_多线程),复杂程序在一个设备上运行良好
  • CameraCapture和我的程序中的相机选择与此处的描述几乎相同:
  • 我还发现了关于这个问题的另一个说法:
  • 任何关于错误的真正含义或可能导致错误的冲突的想法都值得赞赏


    谢谢。

    正如我所怀疑的,我发现了外部冲突。我所有的设备都有条形码扫描仪。在某些情况下,扫描仪和摄像头之间存在冲突。当然,CameraCapture示例不包含任何扫描仪控件,因此它始终有效。这些设备可能共享一些接口硬件,以节省一美元,从而削弱可用性。现在我只需要做一些独家分享