本人正在做一个S100D考勤机的接口程序,由于厂家说这款机器已停产不提供服务了,所以遇到问题现在无法解决。下面是调用的接口,从网上搜索到的 {*Lanben 智能卡函数库 Delphi 声明单元*} unit Lanben; interface 
uses 
  Windows, SysUtils; const 
  SOK            = 'OK'; 
  SERROR        = 'ERROR'; 
  SOVER          = 'OVER'; 
  Lanben_API    = 'Lanben10.dll'; //    自定义通信错误常量 
  ERROR_IO_CHECK=$00000001; //校验错误 
  ERROR_IO_READ=$00000002; //读错误 
  ERROR_IO_WRITE=$00000003; //写错误 
  ERROR_IO_NOEND=$00000004; //串口接收未结束而中断 
  ERROR_IO_NOPEN=$00000005; //不能打开端口 
  ERROR_IO_COMMAND=$00000006; //命令错误 
  ERROR_IO_NOHANDLE=$00000007; //无句柄错误 
  ERROR_IO_TIMEOUT=$00000008; //通讯超时 type 
  PClockInfo = ^TClockInfo; 
  TClockInfo = record 
    hPort: THandle; 
    clock_id: Byte; 
    Ver: string; 
    ICID: BOOL; 
    Fireware: Double; 
    RunMode: Integer; 
    Port, BaudRate, SelType, Model, Clock_Type: integer; 
    Block, CmdVerify, Connected, bSelected: Boolean; 
  end; {设备联接类} //    打开端口及联接设备 
function ConnectClock(Port, BaudRate: Integer; ClockNo: Byte; BroadCast: Boolean=False): THandle; stdcall; external lanben_API 
//    Port      : 端口号, COM1=1, COM2=2; 
//    BaudRate  : 波特率, 一般为9600 
//    ClockNo    : 为机号, 范围0-252 
//    BroadCast  : 为开始群发功能, 不接收返回状态 
//    说明      : 返回值为端口句柄, 当返回-1时表示端口无效或是被占用, 返回0时代表无法联机 //    断开联接及关闭端口 
function DisConnectClock(hPort: THandle): Boolean; stdcall; external Lanben_API 
//    此函数和ConnectClock 对应 //    检查指定的机器是否在联机状态 
function CheckConnectClock(hPort: THandle; ClockNo: Byte; BroadCast: Boolean=False): Byte; stdcall; external Lanben_API 
//    ClockNo    : 为机号, 0-252 
//    BroadCast  : 为开始群发功能, 不接收返回状态 
//    说明      : 返回机器运行模式, 只能是下列值 
//      Return=0 联接不成功 
//      Return=1 考勤机, Return=2考勤门禁机, Return=3门禁机, Return=4份饭机 //    联接指定的机器 
function CallClock(hPort: THandle; ClockNo: Byte; BroadCast: Boolean=False): Byte; stdcall; external Lanben_API 
//    ClockNo    : 为机号, 0-252 
//    BroadCast  : 为开始群发功能, 不接收返回状态 
//    说明      : 返回机器运行模式, 只能是下列值 
//      Return=0 联接不成功 
//      Return=1 考勤机, Return=2考勤门禁机, Return=3门禁机, Return=4份饭机 //  取消联接机器 
function UnCallClock(hPort: THandle): Boolean; stdcall; external Lanben_API //    查询指定机号是否在线 
function TestCallClock(hPort: THandle; ClockNo: Byte; ATimeOut: Integer=0): Byte; stdcall; external Lanben_API 
//    ClockNo    : 为机号, 0-252 
//    ATimeOut  : 响应超时 
//    说明      : 返回机器运行模式, 只能是下列值 
//      Return=0 联接不成功 
//      Return=1 考勤机, Return=2考勤门禁机, Return=3门禁机, Return=4份饭机 //    机器复位 
function ResetClock(hPort: THandle): Boolean;stdcall; external Lanben_API 
//    将卡钟复位到出厂状态,复位会清除所有数据和下载名单 //    读设备型号参数 
function GetClockParam(hPort: THandle; var Model: Integer; var Fireware: Double; var ICID: BOOL): Boolean; stdcall; external Lanben_API 
//    自动识别机器型号, 一般在联机后马上调用以使DLL识别型号 //    手动设置型号参数 
function SetClockParam(hPort: THandle; Model: Integer; Fireware: Double; ICID: BOOL): Boolean; stdcall; external Lanben_API 
//    手动设置机器型号, 自动识别机型失败时调用 //    修改设备通信速率 
function SetClockBaudRate(hPort: THandle; BaudRate: DWORD): Boolean; stdcall; external Lanben_API 
//    BaudRate    : 波特率, 初始值为9600, 可以有以下值: 
//      9600, 19200, 38400 //    设置端口超时时间 
function SetPortTimeOut(Value: Integer): Boolean; stdcall; external Lanben_API 
//    Value      : 超时值, 毫秒为单位, 默认为1000毫秒, //    设置IC卡读写卡操作的超时时间 
function SetPortRWCardTimeOut(hPort: THandle; Value: Integer): Boolean; stdcall; external Lanben_API 
//    Value      : 超时值, 毫秒为单位, 默认为30000毫秒, 
设备联接类}     
          
//    设置机器编号及运行模式 
function SetClockID(hPort: THandle; ClockID: Byte; RunMode: Integer=0): Boolean; stdcall; external Lanben_API 
//    ClockID    : 新机号 
//    RunMode    : 新设备运行模式(参见CallClock返回值) //    取得设备编号 
function GetClockID(Port, BaudRate: Integer;var ClockID: Byte): Boolean; stdcall; external Lanben_API 
//    ClockID    : 返回机号  
//    读取设备时间 
function ReadClockTime(hPort: THandle; var CurTime: Double): Boolean; stdcall; external Lanben_API //    设置设备时间 
function SetClockTime(hPort: THandle; SetTime: Double): Boolean; stdcall; external Lanben_API   
========================================================================我写了一个简单的获取时间的动作,但是一直获取不到,代码如下:procedure TForm1.Button1Click(Sender: TObject);
var
  hPort:THandle;
  COMID:THandle;
  CCID:Byte;
  CurTime:double;
  ret:Byte;
  TryTimes:integer;
  IsOK:boolean;  Model: Integer;
  Fireware: Double;
  ICID: BOOL;  getcurtime:TDateTime;
  datacount:integer;
begin
  COMID:=strtoint(edit1.text);
  CCID:=strtoint(edit2.text);  if SetPortTimeOut(1000) then
    memo1.Lines.Add('SetPortTimeOut OK!')
  else
    memo1.Lines.Add('SetPortTimeOut error!');  hport:=ConnectClock(comid,9600,ccid);
  if hport>0 then
  begin
    sleep(500);
    ret:=CheckConnectClock(hport,ccid);
    sleep(500);
    if ret>0 then
    begin
      ret:=TestCallClock(hport,ccid,100);      if ret>0 then
      begin 
        curtime:=0;
        TryTimes:=3;
        IsOK:=false;
        sleep(500); 
 
        TryTimes:=20;
        sleep(500);
        repeat
          IsOK:=ReadClockTime(hport,CurTime);
          sleep(100);
          dec(TryTimes);
        until (IsOK)or(TryTimes<=0);        if IsOk then
          memo1.Lines.Add('Read Time ok!')
        else
          memo1.Lines.Add('Read Time Error!');       end;
    end
    else
      showmessage('联机失败!');    DisConnectClock(hport);
  end
  else
    showmessage('打开串口失败!'); 
end;
请有做过这个机器接口的朋友指点一下,谢了!