读书人

为什么读卡会出错,请

发布时间: 2012-03-02 14:40:28 作者: rapoo

为什么读卡会出错,请高手指点!
dll说明如下:RDATA: 读卡数据输出缓冲区(用于存放读卡成功后的返回数据)
字符串,长度不少于300字节.

读卡成功返回格式:
RDATA = "磁道1数据 " ------- 返回磁道1数据(此时 TRACK 为1)
RDATA = "磁道2数据 " ------- 返回磁道2数据(此时 TRACK 为2)
RDATA = "磁道3数据 " ------- 返回磁道3数据(此时 TRACK 为3)
RDATA = "磁道2数据a磁道1数据 " ------- 返回磁道2数据和磁道1数据(此时 TRACK 为4)
RDATA = "磁道2数据a磁道3数据 " ------- 返回磁道2数据和磁道3数据(此时 TRACK 为5)

读卡错误: Rcard函数返回值为-4

其中: 小写字符a为磁道2与磁道1(或磁道2与磁道3)的数据的分隔符
1道数据可为字母或数字,最多76个
2道数据只可为数字,最多37个
3数据只可为数字,最多104个

如:
Rcard( "1,9600,N,8,1 ",RDATA,1)
-------- 表示通过串行口1以波特率9600BPS,8位数据位,1位停止位,
无校验的方式从第1磁轨中读取数据(存放在RDATA中)

Rcard( "1,9600,N,8,1 ",RDATA,2)
-------- 表示通过串行口1以波特率9600BPS,8位数据位,1位停止位,
无校验的方式从第2磁轨中读取数据(存放在RDATA中)


Rcard( "1,9600,N,8,1 ",RDATA,3)
-------- 表示通过串行口1以波特率9600BPS,8位数据位,1位停止位,
无校验的方式从第3磁轨中读取数据(存放在RDATA中)

Rcard( "1,9600,N,8,1 ",RDATA,4)
-------- 表示通过串行口1以波特率9600BPS,8位数据位,1位停止位,
无校验的方式从第2磁轨和第1磁轨中读取数据
(存放在RDATA中,中间以小写字符a作间隔)

Rcard( "1,9600,N,8,1 ",RDATA,5)
-------- 表示通过串行口1以波特率9600BPS,8位数据位,1位停止位,
无校验的方式从第2磁轨和第3磁轨中读取数据
(存放在RDATA中,中间以小写字符a作间隔)


我在delphi用的时候是这样的:
implementation
function Rcard(sSET:pchar;RDATA:pchar;TRACK:integer):integer;stdcall;external 'KeyCard.dll '


var
mydata:pchar;
myflg:integer;
begin
try
myflg:=Rcard( '1,9600,N,8,1 ',mydata,2);
except
showmessage(inttostr(myflg));


end;
showmessage(mydata);
end;
可总是出错,读不出东西来,用VC写的读卡程序是这样的:UpdateData(TRUE);
char set[25],rdata[250];
itoa(m_iPort+1,set,10);
strcat(set, ",9600,N,8,1 ");
Rcard( "1,9600,N,8,1 ",rdata,2);
AfxMessageBox(rdata);
这样是可以读出数据的,不知道我在delphi 里为什么读不出来!


[解决办法]
帅哥,你的mydata没分配内存啊!

读书人网 >.NET

热点推荐