• 身份证刷卡 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 解决……

  • 相关阅读:
    Sublime2 Text编辑器使用技巧
    PHP实现一个简单url路由功能
    jQuery extend函数详解
    Memcached常用命令及使用说明
    根据一张表去更新另一张表
    npm ERR! Error: socket hang up
    Oracle中group by 1,order by 1的理解
    Oracle中的next_day(date,char)函数的理解
    WebService入门
    OCupload、POI、PinYin4j的简单入门
  • 原文地址:https://www.cnblogs.com/Linc2010/p/3423220.html
Copyright © 2020-2023  润新知