求助,使用C#调用非托管DLL,出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
DLL在C中的调用方法
long recid,
ft;
Float realdata;
ERRBLOCK err;
DB2REAL (recid, ft, &realdata, &err);
结构体定义:已证实没有问题
[StructLayout(LayoutKind.Sequential)]
public struct ERRBLOCK
{
[MarshalAs(UnmanagedType.I2,SizeConst=16)]
public short ERRCODE; /* Error code returned by ACCESS routines */
[MarshalAs(UnmanagedType.I8, SizeConst = 32)]
public long ERR1;
[MarshalAs(UnmanagedType.I8, SizeConst = 32)]
public long ERR2;
}
在C#中调用
[DllImport("infoplus21_api.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern void DB2REAL(long tagId, long propertyId, out Single Value, out ERRBLOCK errMsg);
调用就会提示“ 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
求助高手~~~~