我也遇到同样的问题了,在C#里调用函数Syn_ReadMsg(nPort, iIfOpen, ref CardMsg)报错,是说“尝试读取或写入受保护的内存,这通常是指示其他内存已损坏”该如何修改呢?
请教各位啦! 

解决方案 »

  1.   

    注意调用时声明的参数类型是否合理,
     会不会是这个参数接收的时候没有声明长度? ref CardMsg 
      

  2.   

    我这个是在做读卡器功能,是从读卡器里读出刷卡的身份证信息,调用这个函数的时候就出现这个问题,搞了几天了,还是没有解决,请教各位帮帮忙了...
    这个结构体是这样的,调用IDCardData实例化的对象
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
            public struct IDCardData
            {
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
                public string Name; //姓名   
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
                public string Sex;   //性别
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
                public string Nation; //名族
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)]
                public string Born; //出生日期
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)]
                public string Address; //住址
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)]
                public string IDCardNo; //身份证号
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
                public string GrantDept; //发证机关
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)]
                public string UserLifeBegin; // 有效开始日期
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)]
                public string UserLifeEnd;  // 有效截止日期
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)]
                public string reserved; // 保留
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
                public string PhotoFileName; // 照片路径
            }
      

  3.   

    WinForm里调用都没问题,可是在Web里就出问题了