[英]Unmanaged code that doesn't run appropriately on 64bit platform
我正在使用從CodeProject中找到的視頻中捕獲幀的代碼
該代碼在 32 位上運行良好,當我嘗試在 64 位系統上運行時問題就開始了。
拋出的異常是“AccessViolationException:嘗試讀取或寫入受保護的 memory。這通常表明其他 memory 已損壞”
我在 32 位和 64 位平台上調試,發現問題出在哪里——
mediaType = new AMMediaType();
mediaDet.get_StreamMediaType(mediaType);
videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader));
在第二行之后,我查看了 mediaType 內容,它在 64 位超過 32 時完全不同,這導致下一行拋出異常(mediaType.formatPtr 具有不同的值)
我認為問題出在“IntPtr”類型上,它在 2 個平台(4 對 8 字節)上的大小不同,問題是我不知道如何克服這個問題。
任何形式的幫助都會很好,在此先感謝 Liran。
找到了解決方案 - 問題出在 DirectShow DLL 中,FrameGrabber 引用了舊版本的 dll,我下載並用他們最新的 DLL 替換了參考,問題已解決。
謝謝你的帖子,立然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.