具体的是一个磁卡读写器的操作(读取磁道信息)函数
可是我调用的时候有问题
我感觉应该写成
function Rcard (SetCMD: pcahr; var RData:PChar;Track:Integer):Integer;请各位看看以下为厂家提供的原文: INT Rcard(CHAR *SET,CHAR *RDATA,INT TRACK)功能:控制sLe353b进行读磁卡操作,按ESC键可退出.返回: 整型
= 1: 读卡正确,
-1: 所选串行口打不开
-2: 与磁卡读写机通信失败(磁卡机没有与主机连接或连接不正确)
-3: 串口设置错误
-4: 读卡错误
-5: 用户 ESC 退出参数:
SET: 字符串,用来设置串口.
格式:"1,9600,N,8,1" ------ (1=com1或2=com2),
(9600=baud9600或4800=baud4800
或2400=baud2400或1200=baud1200),
(N=无校验或O=奇校验或N=偶校验),
(8=8个数据位或7=7个数据位),
(1=1个停止位或2=2个停止位).
如:"2,9600,O,7,1" 表示串口2,波特率9600.奇校验,7个数据位,1个停止位. TRACK: 需要进行写卡操作的磁道选择号(具体定义如下:)
-------- 1:选择第1磁轨
2:选择第2磁轨
3:选择第3磁轨
4:选择第2和第1磁轨
5:选择第2和第3磁轨 RDATA: 读卡数据输出缓冲区(用于存放读卡成功后的返回数据)
字符串,长度不少于300字节.
读卡成功返回格式:
RDATA = "磁道1数据" ------- 返回磁道1数据(此时 TRACK 为1)
RDATA = "磁道2数据" ------- 返回磁道2数据(此时 TRACK 为2)
读卡错误: 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中)
可是我调用的时候有问题
我感觉应该写成
function Rcard (SetCMD: pcahr; var RData:PChar;Track:Integer):Integer;请各位看看以下为厂家提供的原文: INT Rcard(CHAR *SET,CHAR *RDATA,INT TRACK)功能:控制sLe353b进行读磁卡操作,按ESC键可退出.返回: 整型
= 1: 读卡正确,
-1: 所选串行口打不开
-2: 与磁卡读写机通信失败(磁卡机没有与主机连接或连接不正确)
-3: 串口设置错误
-4: 读卡错误
-5: 用户 ESC 退出参数:
SET: 字符串,用来设置串口.
格式:"1,9600,N,8,1" ------ (1=com1或2=com2),
(9600=baud9600或4800=baud4800
或2400=baud2400或1200=baud1200),
(N=无校验或O=奇校验或N=偶校验),
(8=8个数据位或7=7个数据位),
(1=1个停止位或2=2个停止位).
如:"2,9600,O,7,1" 表示串口2,波特率9600.奇校验,7个数据位,1个停止位. TRACK: 需要进行写卡操作的磁道选择号(具体定义如下:)
-------- 1:选择第1磁轨
2:选择第2磁轨
3:选择第3磁轨
4:选择第2和第1磁轨
5:选择第2和第3磁轨 RDATA: 读卡数据输出缓冲区(用于存放读卡成功后的返回数据)
字符串,长度不少于300字节.
读卡成功返回格式:
RDATA = "磁道1数据" ------- 返回磁道1数据(此时 TRACK 为1)
RDATA = "磁道2数据" ------- 返回磁道2数据(此时 TRACK 为2)
读卡错误: 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中)
var
RData: Pchar;
strMsg: String;
begin
Case Rcard('1,9600,0,8,1', RData, 2) of
1:
begin
strMsg := '读卡正确' ;
//Memo1.Lines.Add(RData);
end;
-1:
strMsg := '所选串行口打不开';
-2:
strMsg := '与磁卡读写机通信失败(磁卡机没有与主机连接或连接不正确)';
-3:
strMsg := '串口设置错误';
-4:
strMsg := '读卡错误';
-5:
strMsg := '用户 ESC 退出';
end;
Memo1.Lines.Add(strMsg);
end;
字符串,长度不少于300字节.
自定义了一个格式 TArrayChar = array [0..350] of Char;function Rcard(SetCMD: Pchar; var RData: TArrayChar; Track: Integer):LongInt; stdcall; 'KeyCard.dll';