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。我是做了什么明显愚蠢的事情,还是完全搞错了方向?

AccessViolation异常在vs2013 64位而不是vs2010 64位

我使用的lame版本似乎不是真正的64位兼容,并且不喜欢将64位IntPtr传递给它。我已经解决了我的问题,使用新版本的DLL与此库:

https://www.nuget.org/packages/NAudio.Lame/