新中新二代身份證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);

 

如果是vista以上系統,調試中可能也會出現此錯誤,必須編譯後用管理員模式運行。默認的普通是禁止訪問系統根目錄文件的。

 

ref:http://bbs.csdn.net/topics/390089291 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章