小弟用的是广东达华的MG-500读卡器,在寻卡时返回值每次不等于0(寻卡失败)。不知道是什么原因,函数的声明与调用贴下:
函数介绍:
__int16   rf_request(int   icdev,unsigned   char   _Mode,   unsigned   int   *TagType);
功   能:寻卡请求
参   数:   HANDLE   icdev:设备描述符
unsigned   char   _Mode:寻卡模式,为   0   或   1
Mode=0:IDLE   模式,一次只选一张卡
Mode=1:ALL   模式,   一次可选多张卡
unsigned   int   *Tagtype:指向返回的卡类型值
返   回:成功则返回   0
例:int   st;
st=rf_request(icdev,IDLE,tagtype);
注:对卡操作前先执行寻卡指令函数声明:
function rf_request(icdev:integer;Mode:byte;TagType:PInteger):integer;stdcall;external 'mwrf32.dll';函数调用:
  i := rf_request(icdev,0,@cardtype);
  if i <> 0 then
  begin
    showmessage('寻卡失败!');
    rf_exit(icdev);//关闭串口
    close_port := true;
    exit;
  end;
//icdev:integer设备标识符,cardtype:Integer,卡类型值

解决方案 »

  1.   

    1)建议找一下厂家,厂家有相应的Demo。2)检查一下串口是否打开正常通讯,卡里是否加密。3)这儿是另一个厂家的这个函数Delphi定义,供参考 Function rf_exit( glngICDev : integer) : Integer; stdcall; external 'kkk.dll';
     Function rf_request( glngICDev : integer; mode : char; var atr_type : integer) : Integer; stdcall; external 'kkk.dll';
      

  2.   

    你看一下你的参数对不对;另外,我的也是MifareOne卡,但我的函数是四个参数。
    Request(DeviceAddr, 0x52, cardtype, snr);
      

  3.   

    谢谢回复,我看了一下demo,用的是另外一个函数rf_card,包括了寻卡,防冲突,选卡三个功能,问题已经解决。谢谢。揭帖。