C#调用dll,出现“
尝试读取或写入受保护的内存,这通常指示其他内存已损坏".请高手帮忙!
dll中的原结构是
typedef struct
{
UCHAR basicinfosec;//基础信息扇区
UCHAR publicexchangesec;//公共交换信息扇区
UCHAR WorkSec[13];//用于特定用途的扇区使用信息
} SEC_USED_INFO; //使用扇区信息
函数是
int GetLicInfo(LPSTR CommPassword,LPSTR UserPassword,UCHAR *SysCardNo,SEC_USED_INFO &sec_used_status)
我在c#中是这样定义的
结构体
public struct SEC_USED_INFO
{
public Byte basicinfosec;//基础信息扇区
public Byte publicexchangesec;//公共交换信息扇区
public Byte[] WorkSec;//用于特定用途的扇区使用信息
}
函数
[DllImport( "a.dll ", EntryPoint = "GetInfo ", CharSet = CharSet.Ansi)]
public static extern int GetInfo([MarshalAs(UnmanagedType.LPStr)] string CommPassword, [MarshalAs(UnmanagedType.LPStr)] out string UserPassword, out int SysCardNo, out SEC_USED_INFO sec_used_status);
调试时,老是出现 "尝试读取或写入受保护的内存,这通常指示其他内存已损坏 ";用断点调试看出此函数前两个参数没有返回值,后面两个参数有返回!
请高手指点一二,急死了!
------解决方案--------------------好高深,
帮UP
------解决方案--------------------public Byte[] WorkSec;//用于特定用途的扇区使用信息
这里用marshal指定长度信息
------解决方案--------------------把out 改成 ref。