嗯,贴代码。
Private Sub MSComm_OnComm()
Dim a&
Dim recbuf() As Byte
Dim inlen As Integer
Dim i As Integer
Dim x As Variant
'On Error GoTo error1
Select Case MSComm.CommEvent
Case comEvReceive
inlen = MSComm.InBufferCount
Do Until inlen >= 6
DoEvents
inlen = MSComm.InBufferCount
Loop
ReDim recbuf(0 To inlen - 1)
recbuf = MSComm.Input
Case comFrame
x = MsgBox("帧错误!", vbCritical, "接受数据错误!!")
Exit Sub
Case comEventOverrun
x = MsgBox("数据丢失", vbCritical, "接受数据错误!!")
Exit Sub
End Select
Select Case recbuf(1)
问题在于我一调用recbuf数组中的任意元素都会出现下标越界
Private Sub MSComm_OnComm()
Dim a&
Dim recbuf() As Byte
Dim inlen As Integer
Dim i As Integer
Dim x As Variant
'On Error GoTo error1
Select Case MSComm.CommEvent
Case comEvReceive
inlen = MSComm.InBufferCount
Do Until inlen >= 6
DoEvents
inlen = MSComm.InBufferCount
Loop
ReDim recbuf(0 To inlen - 1)
recbuf = MSComm.Input
Case comFrame
x = MsgBox("帧错误!", vbCritical, "接受数据错误!!")
Exit Sub
Case comEventOverrun
x = MsgBox("数据丢失", vbCritical, "接受数据错误!!")
Exit Sub
End Select
Select Case recbuf(1)
问题在于我一调用recbuf数组中的任意元素都会出现下标越界
解决方案 »
- 关于MS SQL2000的"查询分析器"
- 怎么样才能实现像qq那样可以隐藏窗体在最上面或最旁边,当鼠标移过去时就显示出来!
- VB种如何判断一张表是否存在?
- 使用Setup Factory 6.0
- ★★★★★★★求助! 关于控制窗体移动位置的问题??★★★★★★★
- 新手问,VB6里面怎样调用水晶报表
- 怎样实现在激活一个应用程序时,将另一个应用程序最小化至后台运行
- VB如何处理自定义消息
- 如果要在一个数据库中的一个字段里存储一个目录树的结构信息,如何做呢?
- 初次见面﹐一个小小的怪问题﹐不成敬意﹗
- COM+组件连接数据库失败
- 自己写的vb串口通信的程序,在自己电脑上运行没问题,但是到别人电脑上就出现数组下标越界
Dim a&
Dim buffer As String
Dim recbuf(0 To 5) As Byte
Dim inlen As Integer
Dim i As Integer
Dim x As Variant
Dim c As Variant
On Error GoTo error1
Select Case MSComm.CommEvent
Case comEvReceive
inlen = MSComm.InBufferCount
Do Until inlen >= 6
DoEvents
inlen = MSComm.InBufferCount
Loop
i = 0
For Each c In MSComm.Input
recbuf(i) = c
i = i + 1
Next c
Case comFrame
x = MsgBox("帧错误!", vbCritical, "接受数据错误!!")
Exit Sub
Case comEventOverrun
新代码,问题已解决,谢谢一楼
rivate Sub Form_load()
f1 = False '先置开关的标记位为关
f2 = False
f3 = False
f4 = False
Dim i As Integer
MSComm.Settings = "9600,n,8,1" '串口的初始化设置,9600第一位代表波特率
MSComm.InputMode = comInputModeBinary
MSComm.RThreshold = 6
MSComm.InputLen = 6
MSComm.OutBufferCount = 0
MSComm.InBufferCount = 0
,这是串口的初始化,设置了接收6个字节触发on_comm的事件,不同意你的说法
经过等待,缓冲区可以有超过6个字符的。 ReDim recbuf(0 To inlen - 1)
这样定义就已经限制了接收去的数量了。如果mscomm缓冲区超过inlen会在慢机器上存在一种可能,执行到下面读取缓冲区的时候,缓冲区是超过6个字符的。
recbuf = MSComm.Input后面的部分,本来可以一次读取缓冲区的,你偏偏要一个字节一个字节读,你也不累。
你如果就想读6个字节,就设置mscomm.inputlen属性为6好了。