簡體   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