我按明华的帮助,不知道怎么读密码。。请大虾们给予帮助:
明华的帮助中关于读卡是这样写的:
=================================================
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分。过节嘛~
明华的帮助中关于读卡是这样写的:
=================================================
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分。过节嘛~
unsigned char* r_string
定义的是字符指针
你的data2是定义为string还是array of char都要转换类型st:=srd_4442(icdev,offset,length,addr(data2));
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:
这说明我读卡能成功,但是数据没出来。问题出在哪里呢?
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 :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));
我把offset:=110;length:=8;(这是一段文字)换成:
offset:=10;length:=8;(这个是一段数字)就成功显示了数字了!
但是文字就不能显示我不知道怎么办了。。
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;