偶然将byte []传递给非托管函数

时间:2014-02-20 15:46:58

标签: c# memory unmanaged

我有一个带有以下签名的非托管函数:

WORD GetImage(LPBYTE lpImage);

我通过unsafefixed关键字传递指向此方法的指针,如下所示:

[DllImport(...)]
unsafe static extern Int16 UnmanagedGetImage(void* lpImage);
public static Int16 GetImage(byte[] lpImage)
{
    unsafe
    {
        fixed (byte* ptr = lpImage)
        {
            return UnmanagedGetImage(ptr);
        }
    }
}

此方法的调用如下:

var temp = new byte[this.imageSize.Width * this.imageSize.Height];
var result = GetImage(temp);

然后我从这些信息中创建Bitmap。这段代码在大多数情况下都很有效,但有时候我会有以下报告:

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

我的方法存在根本问题吗?我认为创建一个托管字节[]并修复它以传递给非托管代码应该没问题,但也许我应该做其他事情。

0 个答案:

没有答案