int rf_card(int icdev,unsigned char _Mode,unsigned long *_Snr);_Mode:寻卡模式mode_card(0表示单卡模式,1多卡模式,2指定卡模式)修改如下
if (rf_card(icDev, '0', ref _Snr) == 0) 
{
//操作
}

解决方案 »

  1.   

    文档上介绍的是C语言下的语法,unsigned char就相当于C#的 byte类型吧。。
      

  2.   

    这是我引用的外部dll
    [DllImport("mwrf_bj")]
    private static extern int rf_card(int icdev, byte _Mode, ref ulong _Snr);//寻卡
      

  3.   

    在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。
      

  4.   

    C#里的char是指一个字符吧。我换成rf_card(icDev, '0', ref _Snr)结果还是返回1(无卡)。。
      

  5.   

    我的串口已经成功打开,并返回设备通讯标识为1272(就是icDev的值)
    如果设备标识符不对的话,返回值一般是65519
      

  6.   

    卡是确定存在的,可就是寻不到,但是可以返回卡的序列号。
    如果我拿下卡的话,序列号_Snr不返回任何值,放上去卡的话会返回一个序列号,而且每张卡都不一样。
    可是文档上说序列号是32位的(全球唯一),我取到的才8位。
      

  7.   

    官方程序
    private void btnSeekCard_Click(object sender, System.EventArgs e)
    {
    UInt16 tagtype=0;
    byte size=0;
    uint snr=0;

    mifareone.rf_reset(icdev, 3);
    st = mifareone.rf_request(icdev,1,out tagtype);
    if(st!=0)
    {
    lbResult.Text="request error!";
    return;
    }

    st = mifareone.rf_anticoll(icdev,0,out snr);
    if(st!=0)
    {
    lbResult.Text="anticoll error!";
    return;
    }
    string snrstr="";
    snrstr=snr.ToString("X");
    lbSnr.Text=snrstr;

    st = mifareone.rf_select(icdev,snr,out size);
    if(st!=0)
    {
    lbResult.Text="select error!";
    return;
    }
    lbResult.Text="寻卡成功!";
    }
      

  8.   

    这个我看过的。从网上下的C#例子,只是型号不太一样,他的读卡器是URF-35LT。
    读卡器的光盘上也附带了一些例子,都看过。。rf_card就相当于连续执行了rf_request,rf_anticoll和rf_select三个函数。
    当然我也试着这么做过,可惜第一个rf_request就返回没有卡。
      

  9.   

    mifareone.rf_reset(icdev, 3);你不会是没有执行这个吧?
    这个貌似是卡片复位。
      

  10.   

    保持关注//对设备进行初始化,写在IC类中
        [DllImport("Mwic_32.dll", EntryPoint = "auto_init", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    每次都要初始化。int icdev = IC.auto_init(0, 9600);
                if (icdev < 0)
                    MessageBox.Show("端口初始化失败,请检查接口线是否连接正确。","错误提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                int md = IC.setsc_md(icdev, 1); //设备密码格式
                unsafe
                {
                    Int16 status = 0;
                    Int16 result = 0;
                    result = IC.get_status(icdev, &status);
                    if (result != 0)
                    {
                        MessageBox.Show("设备当前状态错误!");
                        int d1 = IC.ic_exit(icdev);   //关闭设备
                        return;
                    }
                    if (status != 1)
                    {
                        MessageBox.Show("请插入IC卡");
                        int d2 = IC.ic_exit(icdev);   //关闭设备
                        return;
                    }
                }