一个考勤机的实时通信的问题(200分)

  • 主题发起人 主题发起人 tq1
  • 开始时间 开始时间
T

tq1

Unregistered / Unconfirmed
GUEST, unregistred user!
最近开发一个考勤机的系统.在实时通信时遇到些问题.我执行了他带的接口的函数RealReadRecord(hPort: THandle;
Card: PChar;
timeString: PChar;
var mark, flag, clock_id: Integer): 他没等待就直接执行函数的下一条命令啦.我想取实时数据时总是返回不到值.请大家帮忙看看.
这是我写的
procedure TForm1.Button4Click(Sender: TObject);
Var x1,x2:Pchar;
x4,x5,x6,x7:integer;
begin

If OpenPort(@clk) then
///打开串口
begin

x6:=strtoint(edit1.Text);//赋值机号
Getmem(x1,20);
getmem(x2,20);
application.MessageBox('准备读卡','提示',64);
x7:=RealReadRecord(clk.hPort,x1,x2,x4,x5,x6);//执行实时读取命令,但不知道为什么它不等我读完就执行下一次命令.还是我理解错啦.
edit5.Text :=pchar(x1);
end;

end;

---------下面是实时接口函数--------------
{实时控制类}
// 开始实时通讯
function StartupRealTime(hPort: THandle): Boolean;stdcall;
external ICCODE_API

// 开始实时接收刷卡
function StartupRealCollect(hPort: THandle): Boolean;stdcall;
external ICCODE_API
// 说明 : 必须先调用StartupRealTime

// 停止实时接收刷卡记录
function StopRealCollect(hPort: THandle): Boolean;stdcall;
external ICCODE_API
// 和StartupRealCollection 对应

// 实时读取一条刷卡数据(马上返回)
function RealReadRecord(hPort: THandle;
Card: PChar;
timeString: PChar;
var mark, flag, clock_id: Integer): Integer;stdcall;
external ICCODE_API
// Card : 读回的卡号字符串(0结束), 缓冲区需大於20字节长度
// timeString : 读回的14位刷卡时间字符串(0结束), 格式为yyyymmddhhmmss, 缓冲区需大於20字节长度
// mark : 打卡标识
// flag : 记录类型(保留)
// clock_id : 刷卡机号
// 说明当返回0时代表成功, 其它值参考自定义错误

// 开始或结束读取刷卡区的卡号(非实时功能)
function ReadCardNo(hPort: THandle;
Card: PChar;
Kind: Integer): Boolean;stdcall;
external ICCODE_API
// CardNo : 返回读取的卡号缓冲区, 不小于20字节
// Kind : 当Kind=0开始读取卡号, Kind=1 结束读取卡号

// 实时读取在刷卡区的卡号(无等待马上返回)
function RealReadCardNo(hPort: THandle;
Card: PChar;
Card_Length: Integer=10): Boolean;stdcall;
external ICCODE_API
// Card : 读回的卡号字符串(0结束), 缓冲区需大於20字节长度
// Card_Length: 希望返回的卡号长度, 必须是10
// 说明 : 必须先调用ReadCardNo

{实时控制类}
 
用实时循环来取数据.
 
接受答案了.
 
后退
顶部