[DllImport("__BANKER.dll", EntryPoint = "getdata", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern double getdata(StringBuilder sb, int nLen);这是c写的dll代码声明extern "C" __declspec(dllexport) double zhuang(char *array,int N);
结果:
“尝试读取或写入受保护的内存,这通常表明其他内存已损坏。”
网上搜索很多是类型的问题,之前C#用的是char[],出问题,现在改成string ,stringbuilder还是这样。
public static extern double getdata(StringBuilder sb, int nLen);这是c写的dll代码声明extern "C" __declspec(dllexport) double zhuang(char *array,int N);
结果:
“尝试读取或写入受保护的内存,这通常表明其他内存已损坏。”
网上搜索很多是类型的问题,之前C#用的是char[],出问题,现在改成string ,stringbuilder还是这样。
nLen = sb.Count();
=>
EntryPoint = "zhuang"
public static extern double getdata( [MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)] string sb, int nLen); UnmanagedType.ByValTStr是把托管代码转化为非托管代码的数组,SizeConst是数组长度。你可以这样试试