0

我在使用 dllimport 时收到此错误Attempted to read or write protected memory. This is often an indication that other memory is corrupt

private const string dir2 = @"C:\NBioBSP.dll";

[System.Runtime.InteropServices.DllImport(dir2, SetLastError = true, CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl)]
public static extern uint NBioAPI_FreeFIRHandle(IntPtr hHandle, IntPtr hFIR); 

我这样称呼它

uint resultado = NBioAPI_FreeFIRHandle(handle, handle);

任何人都知道问题可能是什么

4

1 回答 1

5

两个问题。

首先,调用约定是错误的。根据定义函数的头文件(以及在 Win32 平台上定义的支持文件NBioAPI__stdcall),您应该使用CallingConvention.StdCall.

其次,在定义API 使用的类型的标头中,NBioAPI_HANDLE并且NBioAPI_FIR_HANDLEtypedef'd to UINT,它始终是 32 位(四个字节)长。您正在使用IntPtr,它具有与平台相关的大小(在 64 位进程中它将是 64 位。)将函数参数更改为uint.

于 2013-06-05T22:52:59.627 回答