明华URF-330-M-11用1.0版的DLL时Open_USB()老出错

wit.chen 2013-12-27 05:29:27
我是在VFP6.0环境下设计的应用系统,每次需要读M1卡时,调用mwrf32.dll (1.0版本)初始化各函数,读完卡时关闭读卡器,并用CLEAR DLLS MWRF32从内存中释放mwrf32.dll。测试时,能正常读写卡,但就是在用户手上用时,Open_USB()时而不时会打不开读卡器,返回-32值,只有将应用系统退出再打开,才可以继续正常用。我也找过明华了,明华的工程师说不懂VFP,一直没进展。求大虾帮忙分析是什么问题。
...全文
417 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wit.chen 2014-01-06
  • 打赏
  • 举报
回复
引用 11 楼 dkfdtf 的回复:
确实,这个版本的 dll 已不再使用 rf_init 这样的函数
有没有可能是某些情况下,打开的设备没有关闭?
试试调用 Open_Usb 之前,不管 3721,先调用 Close _Usb,像这样:
for ii = 1 to 5    && 这个值从 ? 到 ?,根据你的设备数和 Open_Usb 返回的值决定
Close_Usb(ii)
endfor
hICDev = Open_Usb()
if hICDev > 0
...


这个之前有测试过,我估计是明华的DLL有问题,昨晚我制作了一个测试,发现在一次的VFP环境里Open_Usb的值始终都是按非固定值递增,增到INT型益出后,就出现我的应用软件里的问题了。这时,不管如何清DLL,如何清除变量,也就是不管如何清理VFP的环境变量,都是无效的,唯一的办法就是退出VFP,才管用。
wit.chen 2014-01-03
  • 打赏
  • 举报
回复
引用 9 楼 dkfdtf 的回复:
把你的 MWRF32.DLL 发上来看看 上传到: http://access911.net/csdn/
传好了。
都市夜猫 2014-01-03
  • 打赏
  • 举报
回复
确实,这个版本的 dll 已不再使用 rf_init 这样的函数 有没有可能是某些情况下,打开的设备没有关闭? 试试调用 Open_Usb 之前,不管 3721,先调用 Close _Usb,像这样:
for ii = 1 to 5    && 这个值从 ? 到 ?,根据你的设备数和 Open_Usb 返回的值决定
    Close_Usb(ii)
endfor
hICDev = Open_Usb()
if hICDev > 0
  ...
都市夜猫 2014-01-02
  • 打赏
  • 举报
回复
把你的 MWRF32.DLL 发上来看看 上传到: http://access911.net/csdn/
wit.chen 2014-01-02
  • 打赏
  • 举报
回复
引用 7 楼 dkfdtf 的回复:
既然是打开通讯口失败,那你应该找找开发包中的手册等资料,看看是否有初始化端口之类的函数,例如:rf_init
没有初始化端口的函数,只有Open_USB()函数打开设备。Open_USB()打开设备也不是每一次都失败,而且多数时是可以正常打开的,就是偶尔会打开失败,失败后非得要把系统退出来才能继续开。
都市夜猫 2013-12-31
  • 打赏
  • 举报
回复
既然是打开通讯口失败,那你应该找找开发包中的手册等资料,看看是否有初始化端口之类的函数,例如:rf_init
wit.chen 2013-12-31
  • 打赏
  • 举报
回复
引用 3 楼 apple_8180 的回复:
退出之后再进来就可以了。 那你每次 Open_USB() 先释放先前的调用并CLEAR DLLS
这招不管用,我本来就是在有用到时定义DLL,用完后马上就清除DLL了。附上我的部份代码: PARAMETERS C_rw,C_SecNr,C_Adr,C_Data * 读写,扇, 块,数据50 DECLARE short Open_USB in .\proc\MWRF32.DLl DECLARE short rf_beep in .\proc\MWRF32.DLl integer P_icdev,integer P_Msec declare short rf_reset in .\proc\mwrf32.dll integer P_icdev,short P_Msec DECLARE short rf_card in .\proc\MWRF32.DLl integer P_icdev,short P_Mode,short @P_Snr **............ DECLARE short rf_halt in .\proc\MWRF32.DLl integer P_icdev DECLARE integer Close_USB in .\proc\MWRF32.DLl integer P_icdev C_icdev=Open_USB() IF C_icdev>0 tt=rf_beep(C_icdev,1) tt=rf_reset(C_icdev,10) P_Snr=0 tt=rf_card(C_icdev,0,@P_Snr) IF tt=0 **........... ELSE tt=MSGBOX("寻卡失败。",'提示',0) ENDIF tt=rf_halt(C_icdev) ELSE tt=MSGBOX(ALLTRIM(STR(C_icdev))+"读卡器没有正常连接。",'提示',0) ENDIF tt=Close_USB(C_icdev) CLEAR DLLS MWRF32 RETURN C_DATA
wit.chen 2013-12-31
  • 打赏
  • 举报
回复
引用 2 楼 trainee 的回复:
这和VFP没关系。 你要问它-32的错误值是什么意思。 很多所谓的工程师大都不是设计者,只是后期维护者,问到核心的问题,能推脱的尽量推脱。
我即能开发又能维护,不像很大公司那样分得很细。
wit.chen 2013-12-31
  • 打赏
  • 举报
回复
引用 1 楼 dkfdtf 的回复:
-32 对应的错误消息是什么?
十进制-32对应的16进制是-0x20,对应明华的故障列表是"打开通信口失败"。
十豆三 2013-12-28
  • 打赏
  • 举报
回复
退出之后再进来就可以了。 那你每次 Open_USB() 先释放先前的调用并CLEAR DLLS
trainee 2013-12-28
  • 打赏
  • 举报
回复
这和VFP没关系。 你要问它-32的错误值是什么意思。 很多所谓的工程师大都不是设计者,只是后期维护者,问到核心的问题,能推脱的尽量推脱。
都市夜猫 2013-12-27
  • 打赏
  • 举报
回复
-32 对应的错误消息是什么?

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧