我有一个带有以下签名的非托管函数:
WORD GetImage(LPBYTE lpImage);
我通过unsafe
和fixed
关键字传递指向此方法的指针,如下所示:
[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.
我的方法存在根本问题吗?我认为创建一个托管字节[]并修复它以传递给非托管代码应该没问题,但也许我应该做其他事情。