初始化时加上
EscapeCommFunction(m_hComm,SETDTR)
PurgeComm(m_hComm,PURGE_TXCLEAR and PURGE_RXCLEAR and PURGE_TXABORT and PURGE_RXABORT)
试试

解决方案 »

  1.   

    这样写行不行:Private Function SetTimeOut() As Boolean
        On Error GoTo ErrorHandle
        
        'GetCommTimeouts m_CommID, timeouts
        ’此超时设置和MSComm控件相同    Dim tos As COMMTIMEOUTS
        With tos
            .ReadIntervalTimeout = -1
            .ReadTotalTimeoutMultiplier = 0
            .ReadTotalTimeoutConstant = 0   '10
            .WriteTotalTimeoutMultiplier = 0
            .WriteTotalTimeoutConstant = 5000
        End With
        SetTimeOut = SetCommTimeouts(m_CommID, tos)
        
    ErrorHandle:
    End FunctionPublic Property Let PortOpen(ByVal New_PortOpen As Boolean)
        If New_PortOpen Then
            If m_CommID < 0 Then
                Dim l As Long
                l = CreateFile("COM" & m_CommPort, GENERIC_READ Or GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0)
                If l = INVALID_HANDLE_VALUE Then
                    Dim s As String
                    Select Case Err.LastDllError
                    Case IE_BADID, 2
                        s = "无效的端口号。"
                    Case IE_OPEN, 5
                        s = "端口已被占用。"
                    Case IE_MEMORY
                        s = "不能获取缓冲内存。"
                    Case IE_DEFAULT
                        s = "缺省参数错误。"
                    Case IE_HARDWARE
                        s = "硬件不支持。"
                    Case IE_BYTESIZE
                        s = "不支持此数据位数。"
                    Case IE_BAUDRATE
                        s = "不支持此波特率。"
                    Case Else   'IE_NOPEN
                        s = "不能打开端口。"
                    End Select
                    Err.Raise vbObjectError + ERR_INVALIDPORT, MYNAME, s
                Else
                    m_CommID = l
                    
    #If CONBLNMULTI Then
                    Dim lr As Long
                    lr = CreateThread(0, 0, AddressOf ThreadProc, ByVal hwnd, 0, l)
                    
    #Else
                    tmTimer.Enabled = True
    #End If
                    
                    If Not SetTimeOut Or SetCommState(m_CommID, m_DCB) = 0 Or _
                        SetupComm(m_CommID, m_InBufferSize, m_OutBufferSize) = 0 Or _
                        SetCommMask(m_CommID, &H1FFF) = 0 Then
                        CanNotSetStateErr
                    End If
                End If
            Else
                PortOpenedErr
            End If
        Else
            If m_CommID < 0 Then
                PortNotOpenErr
            Else
                Break = False
                
                l = m_CommID
                m_CommID = -1
                
    #If CONBLNMULTI Then
                DoEvents
    #Else
                tmTimer.Enabled = False
    #End If
                
                CloseHandle l
                
                blnRead = False
                blnWrite = False
                blnEvents = False
                
                m_CommEvent = 0
                strIn = vbNullString
                strOut = vbNullString
            End If
        End If
    End Property