今天拿到了一个考勤机的源码。搞了一天都搞不明白。
牌子型号这里不说了。把事情的经过说一下。
开发商提供了PB的源码(PB9)。(这应该事半功倍了吧!)
好!运行开发商的例程。把资料写入考勤机。刷卡!显示姓名,工号,一切正常!
拿到自己的程序里(PB11.5),把资料写入考勤机。写入成功,刷卡,奇怪!怎么姓名是乱码!
开始以为是PB11.5跟PB9可能有所不同,所以把开发商的程序在PB11.5打开,再试。
一切正常。说明跟PB版本无关。
我一直仔细看开发商提供的例程,一条一条调试,把很多多余的代码都删除。留下最精简的。再执行调试。写入考勤机,一切正常,并没发现有什么地方加密。
代码如下
string ls_default_comm,ls_name
long ll_lsh,li_loops1,li_loops2,ll_lsh_new
integer li_i,ret,li_commport,li_count,li_j
ulong iDev,Node_Addr,ll_cardno,old_no
if messagebox("提示","此操作将覆盖考勤机中原卡号编号对照表,写卡前请确认新卡号编号对照表是否完整!要写卡请按确定,否则按取消!",Stopsign!,OKCancel!)=2 then return
wf_updata_bhkh()
li_commport = 0
iDev = OpenComm(li_commport)
if idev<=0 then
st_3.text = "打开串口失败!"
else //打开串口成功
Node_Addr = 65535
ret = Hand_Shake_N(idev,Node_Addr)
if ret = 0 then //握手成功
for li_j = 1 to dw_khbh.rowcount()
ll_lsh_new=li_J
ll_lsh = dw_khbh.getitemnumber(li_j,"bh")
ll_cardno = dw_khbh.getitemnumber(li_j,"kh")
ls_name= dw_khbh.getitemstring(li_j,"xm")
if isnull(ls_name) or ls_name="" then
ls_name="1"
else
ls_name=left(ls_name,8)
end if
ret = DownLoadCardSN(idev,li_j,ll_cardno,ll_lsh,ls_Name)
if ret=0 then //设置ID号成功
st_3.text = string(Node_Addr) +" 设置ID卡 "+string(old_no) +" 为 " + string(ll_lsh) +" 号卡成功!"
else
st_3.text = "设置ID卡失败,错误代码为:"+ string(ret)
end if
next
else //握手失败
st_3.text = string(Node_Addr) + "号考勤机通讯错误:" + string(ret)
end if
Ret = CloseComm(iDev)
if ret<>0 then
st_3.text="串口关闭错误:"+string(ret)
end if
end if
=======================================================
自己实在想不出是哪出了问题,就直接把代码复制到自己的程序里。执行!还是乱码!
开始没头绪了!!!!!!
在猜想,是不是到底自己哪里看漏了。直接把把开发商的PBL加到自己的程序里,心想这次总行了吧!
在自己的程序执行开发商的代码,写入考勤机,刷卡。。。。晕!还是乱码!!!!
到底是什么原因?是不是自己更改了开发商的东西自己不知道呢?又把那PBL复制到单独运行!写入考勤机又可以了!
真想吐血!!!!
各位,有知道是怎么一回事吗?
以下是调用文件!
dascomm.dll
------解决方案--------------------
呵呵,楼主是该结贴了~~