繁体   English   中英

vs2013 64bit中的AccessViolation异常不是vs2010 64bit中的

[英]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解决了我的问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM