簡體   English   中英

在 64 位平台上無法正常運行的非托管代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM