AccessViolation异常在vs2013 64位而不是vs2010 64位
本文关键字:64位 vs2010 AccessViolation vs2013 异常 | 更新日期: 2023-09-27 18:16:28
我得到系统。在VS2013 64位,框架4+上运行我的代码时,AccessViolation异常。它在使用较早的框架或在32位模式下工作。它也可以在32位和64位的VS2010框架4上正常工作。
罪魁祸首就在这里的某个地方:
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。我是做了什么明显愚蠢的事情,还是完全搞错了方向?
我使用的lame版本似乎不是真正的64位兼容,并且不喜欢将64位IntPtr传递给它。我已经解决了我的问题,使用新版本的DLL与此库:
https://www.nuget.org/packages/NAudio.Lame/