学习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事件里,结果是正常的,这是为什么啊?
我参考了串口调试工具的源码,它的确不会出问题,难道是它的单码长,我的代码短?
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事件里,结果是正常的,这是为什么啊?
我参考了串口调试工具的源码,它的确不会出问题,难道是它的单码长,我的代码短?
...全文
相关推荐
mscomm32.ocx
提示没注册,需要将此文件下载放入windows中
MSComm控件
如果只安装VS2005,VS2008,使用MFC编程时,工具箱中无法添加串口通信控件。安装了这个组件后,就可以添加串口通信控件了。 1、将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹中,即C:\windows\system32 2、运行 注册.bat 3、导入 注册.reg
MSComm控件,里面包含MSCOMM.SRG、MSCOMM32.DEP、MSCOMM32.oca、mscomm32.ocx
MSComm串行通讯控件
解决MSComm控件的完全注册问题
information for mscomm,you couldn't use the control in this form。 简单方便,两次双击即搞定!
MSCOMM完整版!好用
MSCOMM完整版 MSCOMM.SRG, MSCOMM32.DEP, MSCOMM32.OCX MSCOMM完整版 MSCOMM.SRG, MSCOMM32.DEP, MSCOMM32.OCX


VB基础类

