Это сводит меня с ума.
Образец CameraCapture для Windows Mobile 6 отлично работает на всех протестированных устройствах 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 «Данные недействительны».
- Я реализовал CErrorLog для загрузки (& PropBag, & ErrorLog), и он никогда не вызывается во время Load (), поэтому более подробная информация недоступна.
- Параметры компиляции и связывания примерно одинаковы для этих двух программ.
- Обе программы используют CoInitializeEx (NULL, COINIT_MULTITHREADED), и сложная программа отлично работает на одном устройстве.
- Выбор камеры как в CameraCapture, так и в моей программе почти идентичен описанию здесь: http://msdn.microsoft.com/en-us/library/aa918757.aspx
- Я нашел еще одно упоминание об этой проблеме: http://www.eggheadcafe.com/software/aspnet/30318752/problem-with-propertybag.aspx
Приветствуются любые мысли о том, что на самом деле означает ошибка или какие конфликты могут ее вызвать.
Спасибо.