Cライブラリのラッパーを作成しようとしていますが、このエラーに本当に苦労しています。
私は多くのアプローチを試しましたが、そのうちの1つを次に示します。
[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 /秒)を返します。バッファはint[16384]です。私のコードは次のようになります:
public static uint GetLibData(IntPtr handle, int[] buffer, uint size)
{
size *= 4;
uint sizeRead = GetData(handle, buffer, size);
sizeRead /= 4;
return sizeRead;
}
問題のある引数はバッファです。以前はIntPtrbufferPtrなどの他の方法で管理してから、 Marshal.AllocHGlobalによってメモリを割り当てようとしましたが、同じエラーが発生していました。
保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。
この関数を正しく呼び出す方法は?