CloseHandle为什么关闭不了串口?

suppriest 2006-06-14 08:51:49
请教一个问题
Private Sub cmdOpen_Click()
Dim DCB As DCB
Dim CommTimeOut As COMMTIMEOUTS
Dim hSerialPort, lResult As Long
If bOpen = False Then
hSerialPort = CreateFile(ComboCOM.Text, GENERIC_READ Or GENERIC_WRITE, 0&, 0&, OPEN_EXISTING, FILE_FLAG_OVERLAPPED Or FILE_ATTRIBUTE_NORMAL, 0&)
If (hSerialPort = INVALID_HANDLE_VALUE) Then
lError = GetLastError()
'MsgBox "打开串口失败!", vbOKOnly + vbCritical, "错误"
lblState.Caption = "Error"
lResult = CloseHandle(hSerialPort)
Exit Sub
End If

'设置超时
CommTimeOut.ReadIntervalTimeout = MAXDWORD
CommTimeOut.ReadTotalTimeoutConstant = 0
CommTimeOut.ReadTotalTimeoutMultiplier = 0
CommTimeOut.WriteTotalTimeoutConstant = 0
CommTimeOut.WriteTotalTimeoutMultiplier = 0
SetCommTimeouts hSerialPort, CommTimeOut

'设置读写缓存
SetupComm hSerialPort, 4096, 1024

'对串口进行指定配置
GetCommState hSerialPort, DCB
DCB.BaudRate = CLng(ComboBaud.Text)
DCB.ByteSize = ComboDataBit.ListIndex + 4
DCB.fParity = ComboCheckBit.ListIndex
DCB.StopBits = ComboStopBit.ListIndex
bOpen = SetCommState(hSerialPort, DCB)
If (bOpen) Then
cmdOpen.Caption = "关闭串口"
lblState.Caption = "OK"
Else
CloseHandle hSerialPort
End If
Else
lResult = CloseHandle(hSerialPort)
cmdOpen.Caption = "打开串口"
lblState.Caption = ""
bOpen = False
End If
End Sub
上面是我用API函数对串口进行操作的,不过不知道为什么用CloseHandle函数关闭不了串口,哪位大侠帮忙看一下,给出原因?
...全文
425 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
suppriest 2006-06-16
  • 打赏
  • 举报
回复
多谢yechat(点尘不惊) 的提示
大意把串口的句柄定义为过程变量
把它定义为窗口级变量就没有问题了~~^_^
junki 2006-06-16
  • 打赏
  • 举报
回复
hSerialPort大于0才说明打开成功;
为什么不使用MSComm控件呢?
yechat 2006-06-16
  • 打赏
  • 举报
回复
你贴出来的程序是打开串口的过程吧
但是得到已打开串口句柄你用的是过程变量:hSerialPort

那打开后,在关闭时hSerialPort不是变成0了吗?怎么关??
而且你没有把关闭串口的代码贴出来。
suppriest 2006-06-15
  • 打赏
  • 举报
回复
怎么没有人顶呀~~,加分到100,请教大侠~~

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧