[英]AccessViolation Exception in vs2013 64bit not vs2010 64bit
在VS2013 64位,框架4+上运行代码时,出现System.AccessViolation异常。 在使用较早的框架或在32位模式下可以使用。 在带有框架4的VS2010上,它也可以在32位和64位上正常工作。
罪魁祸首在这里某处:
GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
IntPtr ptr;
if(CPU.Is32Bit)
{
ptr = (IntPtr)(handle.AddrOfPinnedObject().ToInt32() + index);
}
else
{
ptr = (IntPtr)(handle.AddrOfPinnedObject().ToInt64() + Convert.ToInt64(index));
}
res = beEncodeChunk(hbeStream, nBytes / 2, ptr, pOutput, ref pdwOutput); //<--- Error here
在调试它时,vs2010在64位模式下的ptr是一个数字
35545824
而在vs2013的64位模式下
888151484352
似乎vs2013中的编译器可能正在使用与vs2010不同的内存地址空间。 我是在这里做些明显愚蠢的事情,还是在错误的树上完全吠叫?
我正在使用的la脚版本似乎不是真正的64位兼容,并且不喜欢将64位IntPtr传递给它。 我通过使用此库的较新版本的DLL解决了我的问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.