本人在应用IC卡接口函数APDU_Function进行CPU卡文件选择操作时得到oxff的返回值,提示信息为“读写器机具返回SW指示有错”,请问该如何处理才能得到正确的返回值?
程序主要部分如下: nResult:=HexStrToByte('00A400000200',addr(bReadWrite));
cla:=bReadWrite[0];
ins:=bReadWrite[1];
p1:=bReadWrite[2];
p2:=bReadWrite[3];
lc:=bReadWrite[4];
le:=bReadWrite[5];
nResult:=HexStrToByte('DF01',addr(bReadWrite));
nResult:=APDU_Function(cla,ins,p1,p2,lc,addr(bReadWrite),le,addr(Rece),addr(plen),delay); 要操作的文件标识符为“DF01”,当对MF文件操作时返回值正常。
这一问题很急迫,恳请高手指点,本人将不胜感激。
Function APDU_Function(cla:byte;ins:byte;p1:byte;p2:byte;lc:byte;data:pbytearray;le:byte;rdata:pbytearray;plen:PDWORD;delay:WORD):smallint; stdcall;external 'hxdxq32.dll';
Function HexStrToByte(Str:String;rdata:pbytearray):smallint; stdcall;external 'hxdxq32.dll'; 向大龙驹请教该如何处理。
const
string MYDLL;
MYDLL: = " hxdxq32.dll";
implementation
Function LinkDevice(devicename:string):smallint; stdcall;external MYDLL;
Function UnlinkDevice:smallint;stdcall;external MYDLL;
Function PowerOn(slot:byte;recedata:pbytearray; plen:PDWORD):smallint; stdcall; external MYDLL;
Function PowerOff(slot:byte;recedata:pbytearray;plen:PDWORD):smallint; stdcall; external MYDLL;
Function ReadCard(zone,addr,len:DWORD;recedata:pbytearray;plen:PDWORD):smallint; stdcall;external MYDLL;
Function WriteCard(zone,addr,len:DWORD;senddata,recedata:pbytearray; plen: PDWORD):smallint;stdcall;external MYDLL;
Function ChkSecret(keytype:byte;key,recedata:pbytearray;plen:PDWORD):smallint; stdcall;external MYDLL;u 调用例子:
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; 以上是IC卡读卡器随机手册上提供的参考示例,但只是对非CPU型IC卡的操作示例,两者之间有较大差别。
请各位指点指点。
请各位指点指点。