身份证刷卡 System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。...

mac2022-06-30  69

#region

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 8)]        public struct PERSONINFOW        {            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]            public string name;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]            public string sex;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]            public string nation;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]            public string birthday;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]            public string address;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]            public string cardId;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]            public string police;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]            public string validStart;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]            public string validEnd;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]            public string sexCode;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]            public string nationCode;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]            public string appendMsg;        }

 

#endregion #region [DllImport("cardapi3.dll", EntryPoint = "OpenCardReader", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)] public static extern Int32 OpenCardReader(Int32 lPort, UInt32 ulFlag, UInt32 ulBaudRate); [DllImport("cardapi3.dll", EntryPoint = "GetPersonMsgW", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern Int32 GetPersonMsgW(ref PERSONINFOW pInfo,string pszImageFile); [DllImport("cardapi3.dll", EntryPoint = "CloseCardReader", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern Int32 CloseCardReader(); [DllImport("cardapi3.dll", EntryPoint = "GetErrorTextW", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern void GetErrorTextW(StringBuilder pszBuffer, UInt32 dwBufLen); [DllImport("cardapi3.dll", EntryPoint = "ResetCardReader", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern Int32 ResetCardReader(); #endregion

 

  设置返回的ref参数为static 解决……

 

 

 

转载于:https://www.cnblogs.com/Linc2010/p/3423220.html

最新回复(0)