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 Function
Public 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