這一個讓我瘋狂。DirectShow視頻捕獲過濾器 - IPersistPropertyBag :: Load()返回E_ENVALIDARG
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,「device/file not found」。沒有名字在袋子裏我得到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
有關錯誤的真正手段有什麼想法或什麼衝突可能會導致此讚賞。
謝謝。