c#调用Mwic_32.dll

本文介绍如何使用C#读写器类与4442芯片IC卡进行交互,包括初始化、关闭设备、读写数据等功能,并提供了关键代码示例。

C# 读写器类--调用mwic_32.dll
4442芯片 IC卡

传输速率使用9600

测试环境
读卡器:HCE-201。外接电源型及使用键盘口取电型
IC卡芯片:西门子4442
操作系统:xpsp3;windows2003;vista;win7
平台:vs2005  c#
基本代码来源于网络,经测试完全正常。
正式使用时注意串口号问题,特别是使用USB转串口线的情况。


- 折叠+ 展开C# Code
/// <summary>   
/// HCE-201读卡器 4442芯片   
 /// <para>调用Mwic_32.dll</para>   
/// </summary>   
public class IC4442   
{   
    public IC4442()   
    {   
        //   
        // TODO: 在此处添加构造函数逻辑   
        //   
    }   
    /// <summary>    
    /// 说明:对设备进行初始化 返回: 小于0 错误; 大于0 通讯设备标识符   
    /// </summary>    
    /// <param name="port">通讯口号0、1、2、3分别代表串口1、2、3、4;</param>    
    /// <param name="baud">速率 1200~115200</param>    
    [DllImport("Mwic_32.dll", EntryPoint = "auto_init", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]   
    public static extern int auto_init(int port, int baud);   
  
    /// <summary>   
    /// 关闭设备通讯接口   
    /// </summary>   
    /// <param name="icdev">通讯设备标识符</param>   
    /// <returns></returns>   
    [DllImport("Mwic_32.dll", EntryPoint = "ic_exit", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]   
    public static extern int ic_exit(int icdev);   
  
    [DllImport("Mwic_32.dll", EntryPoint = "turn_off", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]   
    public static extern int turn_off(int icdev);   
  
    [DllImport("Mwic_32.dll", EntryPoint = "turn_on", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]   
    public static extern int turn_on(int icdev);   
  
    [DllImport("Mwic_32.dll", EntryPoint = "setsc_md", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]   
    public static extern int setsc_md(int icdev, int mode);   
  
    //使设备发出蜂鸣声   
    [DllImport("Mwic_32.dll", EntryPoint = "dv_beep", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]   
    public static extern int dv_beep(int icdev, int time);   
  
    //获取设备当前状态   
    [DllImport("Mwic_32.dll", EntryPoint = "get_status", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]   
    public static extern Int16 get_status(int icdev, ref Int16 state);   
  
    /// <summary>    
    /// 说明:向指定地址写数据。返回0正确;非0错误   
    /// </summary>    
    /// <param name="icdev">通讯设备标识符</param>    
    /// <param name="offset">偏移地址,其值范围0~255</param>    
    /// <param name="len">字符串长度,其值范围1~256</param>    
    /// <param name="w_string">写入数据</param>    
    [DllImport("Mwic_32.dll", EntryPoint = "swr_4442", SetLastError = true,CharSet = CharSet.Auto, ExactSpelling = false,CallingConvention = CallingConvention.StdCall)]   
    public static extern int Swr_4442(int icdev, int offset, int len, [MarshalAs(UnmanagedType.LPArray)] byte[] w_string);   
  
    /// <summary>    
    /// 说明:从指定地址读数据。返回0正确;非0错误   
    /// </summary>    
    /// <param name="icdev">通讯设备标识符</param>    
    /// <param name="offset">偏移地址,其值范围0~255</param>    
    /// <param name="len">字符串长度,其值范围1~256</param>    
    /// <param name="r_string">读出数据所存放地址指针</param>    
    [DllImport("Mwic_32.dll", EntryPoint = "srd_4442", SetLastError = true,CharSet = CharSet.Auto, ExactSpelling = false,CallingConvention = CallingConvention.StdCall)]   
    public static extern int Srd_4442(int icdev, int offset, int len, [MarshalAs(UnmanagedType.LPArray)] byte[] r_string);   
  
  
    [DllImport("Mwic_32.dll", EntryPoint = "chk_4442", SetLastError = true,CharSet = CharSet.Auto, ExactSpelling = false,CallingConvention = CallingConvention.StdCall)]   
    //说明:    检查卡型是否正确     
    //调用:    icdev:   通讯设备标识符    
    //返回:     <0   错误   =0   正确   
    public static extern int Chk_4442(int icdev);   
  
  
    [DllImport("Mwic_32.dll", EntryPoint = "csc_4442", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]   
    //说明:    核对卡密码     
    //调用:    icdev:    通讯设备标识符  len:      密码个数,其值为3 p_string: 密码字符串指针   
    //返回:     <0   错误    =0   密码正确   
    public static extern Int16 Csc_4442(int icdev, int len, [MarshalAs(UnmanagedType.LPArray)] byte[] p_string);   
  
  
    /// <summary>    
    /// 说明:改写卡密码 等于0正确 小于0错误   
    /// </summary>    
    /// <param name="icdev">通讯设备标识符</param>    
    /// <param name="len">密码个数,其值为3</param>    
    /// <param name="p_string">新密码地址指针</param>    
    [DllImport("Mwic_32.dll", EntryPoint = "wsc_4442", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]   
    public static extern Int16 Wsc_4442(int icdev, int len, [MarshalAs(UnmanagedType.LPArray)] byte[] p_string);   
  
    [DllImport("Mwic_32.dll", EntryPoint = "rsc_4442", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]   
    //说明:    读出卡密码     
    //调用:    icdev:    通讯设备标识符  len:      密码个数,其值为3 p_string: 存放密码地址指针   
    // 返回:    <>0   错误   =0   正确   
    public static extern int Rsc_4442(int icdev, int len, [MarshalAs(UnmanagedType.LPArray)] byte[] p_string);   
  
    /// <summary>    
    /// 说明:读出密码错误计数器值 大于等于0正确 小于0错误   
    /// </summary>    
    /// <param name="icdev">通讯设备标识符</param>    
    /// <param name="counter">密码错误记数值存放指针</param>    
    [DllImport("Mwic_32.dll", EntryPoint = "rsct_4442", SetLastError = true,CharSet = CharSet.Auto, ExactSpelling = true,CallingConvention = CallingConvention.StdCall)]   
    public static extern int Rsct_4442(int icdev, int counter);   
  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值