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;
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;
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';看看这样行不行。。 后面那个调用的不会。
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'
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文件给我,让我在设备上测试一下,成功就马上给分