我在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
在调试时,在64位模式下vs2010中的ptr是一个类似
的数字35545824
而在64位模式的vs2013中我得到
888151484352
看起来vs2013中的编译器可能使用与vs2010不同的内存地址空间。我在这里做了一些明显愚蠢的事情,还是完全吠叫了错误的树?
答案 0 :(得分:0)
似乎我使用的蹩脚版本并不是真正的64位兼容,并且不喜欢将64位IntPtr传入其中。我已经通过使用较新版本的DLL以及此库解决了我的问题: