【问题标题】:Unmanaged code that doesn't run appropriately on 64bit platform在 64 位平台上无法正常运行的非托管代码
【发布时间】:2011-08-17 13:21:36
【问题描述】:

我正在使用从CodeProject 中找到的视频中捕获帧的代码

代码在 32 位上运行良好,当我尝试在 64 位系统上运行时出现问题。

抛出的异常是“AccessViolationException: Attempted to read or write protected memory。这通常表明其他内存已损坏”

我在32位和64位平台上调试,发现问题出在哪里-

mediaType = new AMMediaType();

mediaDet.get_StreamMediaType(mediaType);

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

在第二行之后我查看了 mediaType 的内容,它在 64bit 超过 32 时完全不同,这导致下一行抛出异常(mediaType.formatPtr 具有不同的值)

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

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

【问题讨论】:

  • 你是如何构建你的应用程序的?您的目标平台是什么?
  • "Any CPU",如果我将测试项目构建为 X86,它可以正常工作,但是由于最终代码应该在 64 位的 SharePoint 平台下运行,我无法改变它 - 我需要让它在不改变目标平台的情况下按原样工作

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


【解决方案1】:

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

感谢你的帖子,立然。

【讨论】:

    猜你喜欢
    • 2017-04-01
    • 1970-01-01
    • 2011-02-28
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多