pb的代码:
function long Set_Load_Val(long icdev,long L_Addr,long Card_Num, long Load_Val,ref long Dev_Sta) library "TechLeader" alias for "Set_Load_Val"
function long Read_SF_Rec(long icdev,long L_Addr,long Record_P,long Records,ref long Dev_Sta) library "TechLeader" alias for "Read_SF_Rec"以上的pb代码麻烦翻译成delphi代码以下的dll函数调用说明,麻烦如何用delphi调用,烦请翻译成代码
int __stdcall  Read_SF_Rec(HANDLE icdev,int L_Addr,int Record_P,LPSTR Records,int *Dev_Sta);
int __stdcall  Shake_Hand(HANDLE icdev,int L_Addr,LPCSTR P_Addr);
int __stdcall Read_Time(HANDLE icdev,int L_Addr,LPSTR Dev_Time,int *Dev_Sta);另外,我自已写了一段调用代码://声明
 function Read_Time(icdev,L_Addr:Integer;var Dev_Time:string;var Dev_Sta:Integer):Integer;stdcall;External DllName;
//执行代码
procedure TFrm_Main.N_ReadTimeClick(Sender: TObject);
var
//  myTime:PChar;//用pchar试过也不行
  mytime:string;
  tt:string;
  jg:Integer;
  state:Integer;begin
  MyIniCom(ComPort,ComHandle);//打开com
  try
    if Shake_Hand(ComHandle,L_Addr,P_Addr)=0 then//设备握手
    begin
      jg:=Read_Time(ComHandle,L_Addr,myTime,state);//读时间
      if jg<>0 then
      begin
        MessageDlg('测试连接失败'+#13+'错误码:'+inttostr(jg),mtWarning,[mbOK],0);
        Abort;
      end;
    end;
  finally
  //  freemem(myTime);
    CloseComm(ComHandle);
  end;
end;

解决方案 »

  1.   

    PB:
    function long Set_Load_Val(long icdev,long L_Addr,long Card_Num, long Load_Val,ref long Dev_Sta) library "TechLeader" alias for "Set_Load_Val"
    function long Read_SF_Rec(long icdev,long L_Addr,long Record_P,long Records,ref long Dev_Sta) library "TechLeader" alias for "Read_SF_Rec"Delphi:
    function Set_Load_Val(icdev,L_Addr,Card_Num,Load_Val: LongInt; var Dev_Sta: LongInt): LongInt stdcall; external 'TechLeader.dll';
    function Read_SF_Rec(icdev,L_Addr,Record_P,Records: LongInt; var Dev_Sta: LongInt): LongInt; stdcall; external 'TechLeader.dll';看看这样行不行。。 后面那个调用的不会。
      

  2.   

    function Read_Time(icdev: THandle; L_Addr: Integer; Dev_Time: LPSTR; var Dev_Sta:Integer):Integer;stdcall;External DllName;关于Dev_Sta要看是如何声明的了!
      

  3.   

    感觉是要翻译这几句
    string得改成pcharint __stdcall Read_SF_Rec(HANDLE icdev,int L_Addr,int Record_P,LPSTR Records,int *Dev_Sta);
    int __stdcall Shake_Hand(HANDLE icdev,int L_Addr,LPCSTR P_Addr);
    int __stdcall Read_Time(HANDLE icdev,int L_Addr,LPSTR Dev_Time,int *Dev_Sta);=》
      function Read_SF_Rec(icdev:THandle;L_Addr:integer;Record_P:integer;Records:pchar;Dev_Sta:PInteger):Integer;stdcall;external 'test.dll';  function Shake_Hand(icdev:THandle;L_Addr:Integer;P_Addr:pchar):Integer;stdcall;external 'test.dll';  function Read_Time(icdev:THandle;L_Addr:Integer;Dev_Time:Pchar;Dev_Sta:PInteger):Integer;stdcall;external 'test.dll'
      

  4.   

    integer li_ii          //循环变量
    long ll_icdev          //串口指针
    long ll_addr,ll_com       //设备机器号、串口号
    long ll_return         //设备状态,为0说明正常
    string  ls_strinf       //列表信息提示框内容
    string  ls_datetime   //得到考勤机时间(机器时间)
    integer li_counter     //列表显示编号
    integer li_kk          //循环变量
    string  ls_paddr
    long ll_devsta
    string ls_distime
    wf_dispinfo("开始读设备日期时间,请稍候...",0,'N',dw_info)for li_ii = 1 to dw_dev.rowcount()
    ll_addr = dw_dev.object.devid[li_ii]
    ll_com = long(dw_dev.object.devcom[li_ii])
    ls_paddr = dw_dev.object.devmacaddr[li_ii]
    ll_icdev = iuo_techleader.OpenComm(ll_com)
    if ll_icdev <= 0 then
     ls_strinf ="Com" + String(ll_com) + "打开失败!"
     continue
    else
     ls_strinf ="Com" + String(ll_com) + "打开成功!"
    end if
    wf_dispinfo(ls_strinf,1,'N',dw_info)

    for li_kk = 1 to 3
    ll_return = iuo_techleader.Shake_Hand(ll_icdev,ll_addr,ls_paddr)
    if ll_return = 0 then
    ls_strinf ="机号" + String(ll_addr) + "握手成功!"
    exit
    end if
    next
    if ll_return <> 0 then
    ls_strinf ="机号" + String(ll_addr) + "握手失败!"
    end if

    wf_dispinfo(ls_strinf,1,'N',dw_info)
    dw_dev.object.devstatusid[li_ii] = 0
    if ll_return <> 0 then
    iuo_techleader.CloseComm(ll_icdev)
    continue
    else
    dw_dev.object.devstatusid[li_ii] = 1
    end if
    //对设备读时间
    for li_kk = 1 to 3 
    ls_datetime = space(15)
        ll_return = iuo_techleader.Read_Time(ll_icdev,ll_addr,ls_datetime,ll_devsta)
    if ll_return = 0 then
    ls_distime = "20"+String(f_hextolong(mid(ls_datetime,1,2),2)) + "年" + &
    String(f_hextolong(mid(ls_datetime,3,2),2)) + "月" + &
    String(f_hextolong(mid(ls_datetime,5,2),2)) + "日" + &
    String(f_hextolong(mid(ls_datetime,7,2),2)) + ":" + &
    String(f_hextolong(mid(ls_datetime,9,2),2)) + ":" + &
    String(f_hextolong(mid(ls_datetime,11,2),2))
    ls_strinf ="机号" + String(ll_addr) + "设备读时间成功!" + ls_distime + f_devsta(ll_devsta)
    exit
    end if
    next
    if ll_return <> 0 then
    ls_strinf ="机号" + String(ll_addr) + "读时间失败!" 
       iuo_techleader.CloseComm(ll_icdev)
       end if
    wf_dispinfo(ls_strinf,1,'N',dw_info) iuo_techleader.CloseComm(ll_icdev)
    nextwf_dispinfo("读设备日期时间完成!",1,'N',dw_info)
    --以上代码哪位帮我做个exe文件给我,让我在设备上测试一下,成功就马上给分