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

时间:2011-05-03 08:56:32

标签: c# 64-bit unmanaged 32bit-64bit intptr

我正在使用一个代码来捕捉我在CodeProject

中找到的视频中的帧

代码在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具有不同的值)

我假设问题是“IntPtr”类型,在2个平台上大小不同(4对8字节) 问题是我不知道如何克服这个问题。

任何形式的帮助都会很好, 提前致谢, 丽然

1 个答案:

答案 0 :(得分:1)

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

感谢您的帖子,Liran。

相关问题