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

  • 相关阅读:
    Lua中如何实现类似gdb的断点调试—06断点行号检查与自动修正
    211. 添加与搜索单词 数据结构设计 (JAVA)
    SuperSocket 1.5 stable发布
    SuperWebSocket发布0.1版本
    无需等待,SuperSocket 1.4 SP1 发布了!
    SuperSocket 1.5 文档列表
    SuperSocket 1.4 SP2 发布了!
    imx6ull spiimx.c 驱动接收导致内存问题
    nacos下载、安装、使用,SpringCloud、SpringBoot、SpringCloudAlibaba版本匹配、openfeign、loadbalancer、nacos配置中心
    idea配置显示Run Dashboard,引入自定义jar包
  • 原文地址:https://www.cnblogs.com/Linc2010/p/3423220.html
Copyright © 2020-2023  润新知