vs2013中的AccessViolation异常64位而非vs2010 64位

时间:2014-08-05 03:32:16

标签: c# visual-studio-2010 visual-studio-2013 64-bit dllimport

我在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不同的内存地址空间。我在这里做了一些明显愚蠢的事情,还是完全吠叫了错误的树?

1 个答案:

答案 0 :(得分:0)

似乎我使用的蹩脚版本并不是真正的64位兼容,并且不喜欢将64位IntPtr传入其中。我已经通过使用较新版本的DLL以及此库解决了我的问题:

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