不能在64位平台上正常运行的非托管代码

本文关键字:正常运行 非托管代码 平台 64位 不能 | 更新日期: 2023-09-27 17:54:14

我正在使用一个代码,从我在CodeProject

中找到的视频中捕获一帧。

代码在32位上运行得很好,当我试图在64位系统上运行时问题开始了。

抛出的异常是"AccessViolationException: attempt to read or write protected memory. "这通常表明其他内存已损坏"

我在32位和64位平台上调试,找到了问题所在-

mediaType = new AMMediaType();
mediaDet.get_StreamMediaType(mediaType);
videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader));

在第二行之后,我查看了mediaType内容,它在64位和32位之间完全不同,这导致下一行抛出异常(mediaType。formatPtr有不同的值)

我认为问题是"IntPtr"类型,其大小在两个平台上不同(4 vs 8字节)问题是我不知道如何克服这个问题。

任何形式的帮助都会很好,提前感谢,Liran .

不能在64位平台上正常运行的非托管代码

找到了解决方案-问题在于DirectShow DLL, FrameGrabber引用了一个旧版本的DLL,我下载并将其替换为最新的DLL,问题解决了。

李然,谢谢你的帖子。