2011-05-03 50 views
1

我使用捕捉從我CodeProject並不在64位平臺上運行適當

的代碼運行在32位偉大的發現了一個視頻幀中的代碼非託管代碼,當我嘗試運行問題開始在64位系統上。

引發的異常是「AccessViolationException:嘗試讀取或寫入保護內存這往往是其他內存已損壞的指示」

我在32位和64位中的調試平臺,發現那裏的問題是 -

mediaType = new AMMediaType(); 

mediaDet.get_StreamMediaType(mediaType); 

videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader)); 

第二行後我看着mediaType的內容,它是在64位的超過32,這會導致下一行到拋出異常完全不同的(mediaType.formatPtr具有不同的值)

我認爲問題是在2個平臺上的大小不同的類型「IntPtr」(4對8字節) 事情是,我不知道如何克服這個問題。

任何一種幫助會很好, 在此先感謝, Liran。

+0

你是如何構建你的應用程序?你的目標平臺是什麼? – weismat 2011-05-03 09:12:19

+0

「任何CPU」,如果我將測試項目構建爲X86,它可以正常工作,但最終代碼應該在64位的SharePoint平臺下運行,並且我無法更改 - 我需要使其工作原樣而不更改目標器平臺 – liranco 2011-05-03 11:27:10

回答

1

發現解決方案 - 問題在於DirectShow DLL,FrameGrabber引用了舊版本的dll,我下載並用最新的DLL替換了引用並解決了問題。

感謝您的帖子,Liran。