学习MSComm又遇问题!
Option Explicit
Private Sub Command1_Click()
On Error GoTo ErrHandle:
If MSComm1.PortOpen = False Then
Me.MSComm1.CommPort = CInt(Text2.Text)
MSComm1.Settings = Text3.Text & "," & Text4.Text & "," & Text5.Text & "," & Text6.Text
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
Command1.Caption = "关闭端口"
ElseIf MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
Command1.Caption = "打开端口"
End If
Exit Sub
ErrHandle:
MsgBox Err.Number & ":" & Err.Description
End Sub
Private Sub MSComm1_OnComm()
MSComm1.InputMode = comInputModeBinary
Select Case MSComm1.CommEvent
Case comEvReceive
Dim intLength As Integer
intLength = 0
Dim myArray() As Byte
intLength = MSComm1.InBufferCount
ReDim myArray(intLength)
myArray = MSComm1.Input
Text1.Text = ConvertToString(myArray)
End Select
End Sub
Private Function ConvertToString(inputArray() As Byte) As String
Dim strHex As String
Dim strString As String
Dim i As Integer
For i = 0 To UBound(inputArray)
strHex = strHex & CStr(Hex(inputArray(i))) & " "
If inputArray(i) < 32 Or inputArray(i) > 128 Then
strString = strString & Chr(63)
Else
strString = strString & Chr(inputArray(i))
End If
Next
ConvertToString = strHex & vbCr & strString & vbCr
End Function
这是我的测试代码,我发现单步调试时结果正常,直接运行就只接给我显示了strHex和strString最后两个字符,我读出来的数据是D ?,D是strHex的最后一位,?是strString的最后一位,但我单步调试是一样的.还有,我发现,如果我把断点放在ConvertoString这过程中会是这个结果,如果把断点放在OnComm事件里,结果是正常的,这是为什么啊?
我参考了串口调试工具的源码,它的确不会出问题,难道是它的单码长,我的代码短?