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)
{
//操作
}
if (rf_card(icDev, '0', ref _Snr) == 0)
{
//操作
}
调试欢乐多
[DllImport("mwrf_bj")]
private static extern int rf_card(int icdev, byte _Mode, ref ulong _Snr);//寻卡
如果设备标识符不对的话,返回值一般是65519
如果我拿下卡的话,序列号_Snr不返回任何值,放上去卡的话会返回一个序列号,而且每张卡都不一样。
可是文档上说序列号是32位的(全球唯一),我取到的才8位。
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="寻卡成功!";
}
读卡器的光盘上也附带了一些例子,都看过。。rf_card就相当于连续执行了rf_request,rf_anticoll和rf_select三个函数。
当然我也试着这么做过,可惜第一个rf_request就返回没有卡。
这个貌似是卡片复位。
[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;
}
}