发表于:2006-08-18 10:05:00
楼主
VB的MSCOMM控件虽然很好用,但是在没有装VB的机器上用该控件总觉得有些累赘,网上的VB API代码大部分都基于同步方式,处理复杂的通信模式不是太理想,所以用了一些时间,把VC项目中的异步串口读写代码翻译为VB格式。
*************************************************************************
'**函 数 名:OpenPort
'**输 入:ComNumber(Long) - 串口号
'** :Comsettings(String) - 配置信息
'**输 出:(Long) - 0 成功 非 0 失败
'**功能描述:打开串口
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2006-08-17 14:40:14
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Public Function OpenPort(ComNumber As Long, Comsettings As String, Optional lngInSize As Long = 1024, Optional lngOutSize As Long = 512) As Long
On Error GoTo handelinitcom
Dim retval As Long
Dim CtimeOut As COMMTIMEOUTS, dcbs As DCB
Dim strCOM As String, strConfig As String
strCOM = "\.COM" & Format(ComNumber, "0")
m_Handle = CreateFile(strCOM, GENERIC_READ Or GENERIC_WRITE, 0, 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_OVERLAPPED, 0)
If m_Handle = -1 Then
OpenPort = -1
Exit Function
End If
'设置dcb块
dcbs.DCBlength = Len(dcbs) '长度
Call GetCommState(m_Handle, dcbs)
'波特率,奇偶校验,数据位,停止位 如:9600,n,8,1
strConfig = "COM" & Format(ComNumber, "0") & ":" & Comsettings
Call BuildCommDCB(strConfig, dcbs)
'------------------------------
' dcbs.fBinary = 1 '二进制方式
' dcbs.fOutxCtsFlow = 0 '不用CTS检测发送流控制
' dcbs.fOutxDsrFlow = 0 '不用DSR检测发送流控制
' dcbs.fDtrControl = DTR_CONTROL_DISABLE '禁止DTR流量控制
' dcbs.fDsrSensitivity = 0 '对DTR信号线不敏感
' dcbs.fTXContinueOnXoff = 1 &nb