繁体   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