2011-05-03 53 views
1

我使用捕捉从我CodeProject并不在64位平台上运行适当

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

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

任何一种帮助会很好, 在此先感谢, Liran。

+0

你是如何构建你的应用程序?你的目标平台是什么? – weismat 2011-05-03 09:12:19

+0

“任何CPU”,如果我将测试项目构建为X86,它可以正常工作,但最终代码应该在64位的SharePoint平台下运行,并且我无法更改 - 我需要使其工作原样而不更改目标器平台 – liranco 2011-05-03 11:27:10

回答

1

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

感谢您的帖子,Liran。