我按明华的帮助,不知道怎么读密码。。请大虾们给予帮助:
明华的帮助中关于读卡是这样写的:
=================================================
int srd_4442(int icdev, int offset, int len, unsigned char* r_string )
说明: 从指定地址读数据 
调用: icdev: 通讯设备标识符 
offset: 偏移地址,其值范围0~255
len: 字符串长度,其值范围1~256 
r_string: 读出数据所存放地址指针
返回: <>0 错误
=0
============================================
我是这样写的:
offset:=110;
length:=8;
st:=srd_4442(icdev,offset,length,data2);
if st<>0 then
  begin
    listbox1.items.add('read error');
    exit;
  end
else
  listbox1.items.add('read ok');
  listbox1.items.add('data:'+data2);
其中我不知道这个data2应该不用赋值吧,但它返回错误。我看了明华的例子,但是它也出现错误(当然我有offset:=110;length:=8;,我IC卡里面也是有数值的。)。不知道为什么读不了卡。写卡我就更不知道怎么办了。。请大虾们给个例子最好了。。我出100分。过节嘛~

解决方案 »

  1.   

    data2定义的什么类型?一般这种东西是不会有错误的.如果他的例子都有错误,那最好先检查一下机具装的是否正确了.
      

  2.   


    unsigned char* r_string 
    定义的是字符指针
    你的data2是定义为string还是array of char都要转换类型st:=srd_4442(icdev,offset,length,addr(data2));
      

  3.   

    offset:=110;
    length:=8;
    st:=srd_4442(icdev,offset,length,addr(data2));
    if st<>0 then
      begin
        listbox1.items.add('read error');
        exit;
      end
    else
      listbox1.items.add('read ok');
      listbox1.items.add('data:'+data2);
    ===================================
    这样写吗?运行后listbox里显示:
    read ok
    data:
    这说明我读卡能成功,但是数据没出来。问题出在哪里呢?
      

  4.   

    offset:=110;
    length:=8;
    st:=srd_4442(icdev,offset,length,data2);
    if st<>0 then
      begin
        listbox1.items.add('read error');
        exit;
      end
    else
      listbox1.items.add('read ok');
      listbox1.items.add('data:'+data2);
      

  5.   

    var
      Data2 :PChar;
    ------------------
    offset:=110;
    length:=8;
    st:=srd_4442(icdev,offset,length,data2);
    if st<>0 then
      begin
        listbox1.items.add('read error');
        exit;
      end
    else
      listbox1.items.add('read ok');
      listbox1.items.add('data:'+StrPas(data2));
      

  6.   

    Kevin_Lmx(繁华阅尽),通过你的代码,我只差一点就成功了:
    我把offset:=110;length:=8;(这是一段文字)换成:
    offset:=10;length:=8;(这个是一段数字)就成功显示了数字了!
    但是文字就不能显示我不知道怎么办了。。
      

  7.   

    明华的调用例子:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      nCom:string;
      i:smallint;
      bSecret:array[0..16] of byte;
      nResult:integer;
      bReadWrite,Rece:array[0..255] of byte;
      plen:DWORD;
    begin
      //打开设备
      bSecret[0]:=$ff;bSecret[1]:=$ff;
      nCom:=’COM1’;
      nResult:= LinkDevice (nCom);
      showmessage(IntToStr(nResult));
      nResult:=PowerOn(1,addr(bReadWrite),addr(plen));
      showmessage(IntToStr(nResult));
      //核对密码
      nResult:=ChkSecret(0,addr(bSecret),addr(bReadWrite),addr(plen));
      showmessage(IntToStr(nResult));
      //写卡
      for i:=0 to 255 do
        bReadWrite[i]:=i;
      nResult:=WriteCard(0,32,32,addr(bReadWrite),addr(Rece),addr(plen));
      showmessage(IntToStr(nResult));
      //读卡
      for i:=0 to 255 do bReadWrite[i]:=0;
      nResult:=ReadCard(0,0,80,addr(bReadWrite),addr(plen));
      showmessage(IntToStr(nResult));
      nResult:=PowerOff(1,addr(bReadWrite),addr(plen));
      showmessage(IntToStr(nResult));
      //关闭设备
      nResult:=UnlinkDevice;
      showmessage(IntToStr(nResult));
    end;