日期:2014-05-19  浏览次数:21099 次

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。