日期:2014-05-18  浏览次数:21216 次

新中新二代身份证dll调用,报尝试读取或写入受保护的内存,这通常指示其他内存已损坏 这个错
新中新二代身份证dll调用问题:
 调用这个dll时, 到这个方法: Syn_ReadMsg(nPort, 0, ref CardMsg),就报尝试读取或写入受保护的内存。这通常指示其他内存已损坏 这个错,CardMsg是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; // 照片路径
  }

  原型方法: [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadMsg", CharSet = CharSet.Ansi)]
  public static extern int Syn_ReadMsg(int iPortID, int iIfOpen, ref IDCardData pIDCardData);
  就算是新中新光盘里给的示例程序我运行都是报这个错,在论坛里找半天也没找到确切的解决方法,求高手解决
 

------解决方案--------------------
探讨
不行,都是乱码,而且返回值还是2,表明没有调用成功,谢谢你了,我想想其它方法吧

------解决方案--------------------
表示关注,另外你有没有试过其它已有程序读取,确认读卡器已经身份证本身都可以正常被读取,这种和外设有个的操作,先要排除外设问题才行。
------解决方案--------------------
新中新的有个示例。你问他们官方要一下。

我刚上传的好象新中新的。http://download.csdn.net/detail/zanfeng/4363831

http://download.csdn.net/detail/zanfeng/4363831
他们给的例子。是一个控件使用很简单了。