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

    #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 解决……

  • 相关阅读:
    介绍一个成功的 Git 分支模型 Release 分支
    启动安卓模拟器报错 emulator: ERROR: x86_64 emulation currently requires hardware acceleration! CPU acceleration status:HAXM must be updated(version 1.1.1<6.0.1) 解决办法
    AceyOffice教程复制行
    AceyOffice教程设置单元格边框
    Excel生成报表之解决方案合并单元格的用法
    AceyOffice教程报表之解决方案(二)
    Excel生成报表之解决方案插入图片
    AceyOffice教程复制列
    Excel基础知识(一)
    AceyOffice教程报表之解决方案(一)
  • 原文地址:https://www.cnblogs.com/Linc2010/p/3423220.html
Copyright © 2011-2022 走看看