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

  • 相关阅读:
    hdu 1166 敌兵布阵
    linux(debian)系统django配远程连接sqlserver数据库
    [机器学习] Coursera ML笔记
    UICollectionView使用方法补充(照片轮播墙)
    word中公式的排版及标题列表
    FZOJ2110: Star
    Windows 下的 Makefile 编写
    掌握VS2010调试 -- 入门指南
    Visual Studio 2010初学者的调试指南:Mastering Debugging in Visual Studio 2010
    AlphaGo:用机器学习技术古老的围棋游戏掌握AlphaGo: Mastering the ancient game of Go with Machine Learning
  • 原文地址:https://www.cnblogs.com/Linc2010/p/3423220.html
Copyright © 2011-2022 走看看