vb读取二维码源代码

 人参与 | 时间:2026-10-17 06:52:13
VB6里读二维码,维码这事听起来像考古。源代但别笑,维码工厂流水线上那堆老设备,源代跑的维码还是VB6写的上位机。客户要求加个扫码功能,源代你总不能让他把整条产线的维码工控机都换了吧。 我接过一个项目,源代食品包装线的维码读码工位。原来用串口接扫码枪,源代枪当键盘用,维码焦点在哪字打到哪。源代问题来了,维码操作工手一抖,源代焦点跑到别的维码文本框,批次号就串了。后来干脆不用枪的键盘模拟,直接在VB里调扫码器的动态库。可那家国产扫码器给的DLL是C++写的,VB调用要写一堆Declare声明,结构体对齐、回调函数指针,折腾得人想摔键盘。 换个思路。扫码器一般都有串口或网口输出,TCP/IP协议栈在VB6里用Winsock控件,简单粗暴。扫码器设成TCP客户端,连上你写的VB服务端,数据一行行发过来。你只管在DataArrival事件里收字符串,按回车拆包。这法子稳,不依赖厂商DLL,只要扫码器支持TCP输出——现在市面上的基本都支持。 代码长这样:一个Winsock控件,一个Textbox显示日志。收到数据,先用InStr找换行符,把完整行截出来,再Trim掉多余空格。二维码内容可能是纯数字,也可能带逗号分号,别急着Split,先看客户给的格式文档。我那次就吃了亏,码里带了个“+”号,当成普通字符处理,结果数据库里存进去全是乱码。 真正坑人的是扫码器触发模式。默认是手动触发,按键才扫。产线上要自动感应,得改触发方式。有些牌子用IO触发,有些用连续扫描。VB这边不用管触发,只管收数据,但你要在界面上加个“测试连接”按钮,方便调试时看网络通不通。按钮事件里就用Winsock.Connect,连不上就弹MsgBox,这比看一堆调试日志直观。 还有编码问题。二维码内容有时是中文,扫码器默认输出GBK,VB6的字符串也是ANSI,直接收没问题。但你要是存数据库,或者发到网页接口,就得转成UTF-8。用ADODB.Stream,写入再读出来,转码完再处理。别贪省事用StrConv,那个只转Unicode和ANSI,跟UTF-8不对路。 最后提醒一句,VB6的Winsock在数据量大时会丢包。扫码数据短,问题不大,但你最好在接收端做个缓冲区,拼字符串,等超时再判断完整。用Timer控件,500毫秒没新数据就当一条完整消息处理。这法子糙,但管用,至少我跑了三个月没出过乱子。 说到底,VB读二维码就是个串口或网络数据接收的活。别被“二维码识别”这词唬住,识别是扫码器干的,你只是接它吐出来的字符串。把通信搞稳,把编码搞对,剩下都是体力活。
顶: 69踩: 3725