我正在尝试为 C 库编写一个包装器,但我真的在为这个错误而苦苦挣扎。
我尝试了很多方法,这里是其中之一:
[DllImport(DRIVER_FILENAME)]
[return: MarshalAs(UnmanagedType.U4)]
private static extern uint GetData(IntPtr handle,
[MarshalAs(UnmanagedType.LPArray), In()] int[] buffer,
[MarshalAs(UnmanagedType.U4)] uint size);
这是库文档中的函数GetData:
LONG GetData(
IN HANDLE Handle,
OUT PULONG Buffer,
IN ULONG Size
);
函数在缓冲区中返回连续数据(大约 16KB/s),其大小以字节为单位。缓冲区是int[16384]。我的代码如下所示:
public static uint GetLibData(IntPtr handle, int[] buffer, uint size)
{
size *= 4;
uint sizeRead = GetData(handle, buffer, size);
sizeRead /= 4;
return sizeRead;
}
有问题的参数是buffer,我之前尝试过以其他方式管理它,例如IntPtr bufferPtr然后通过Marshal.AllocHGlobal分配内存,但我得到了同样的错误:
尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
如何正确调用该函数?