Private Shared Function SetCommTimeouts(ByVal hfile As Integer, ByRef lpCommTimeouts As COMMTIMEOUTS) As Boolean End Function '参数说明 'hFile 通信设备句柄 handle to comm device 'lpCommTimeouts 超时时间 time-out values <DllImport("kernel32.dll")> _ Private Shared Function ReadFile(ByVal hFile As Integer, ByVal lpBuffer() As Byte, _ ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesRead As Integer, _ ByRef lpOverlapped As OVERLAPPED) As Boolean End Function '参数说明 'hFile 通信设备句柄 handle to file 'lpBuffer 数据缓冲区 data buffer 'nNumberOfBytesToRead 多少字节等待读取 number of bytes to read 'lpNumberOfBytesRead 读取多少字节 number of bytes read 'lpOverlapped 溢出缓冲区 overlapped buffer <DllImport("kernel32.dll")> _ Private Shared Function WriteFile(ByVal hFile As Integer, ByVal lpBuffer() As Byte, _ ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesWritten As Integer, _ ByRef lpOverlapped As OVERLAPPED) As Boolean End Function '参数介绍 'hFile 通信设备句柄 handle to file 'lpBuffer 数据缓冲区 data buffer 'nNumberOfBytesToWrite 多少字节等待写入 number of bytes to write 'lpNumberOfBytesWritten 已经写入多少字节 number of bytes written 'lpOverlapped 溢出缓冲区 overlapped buffer <DllImport("kernel32.dll")> _ Private Shared Function CloseHandle(ByVal hObject As Integer) As Boolean End Function '参数hObject 要被关闭的句柄 handle to object <DllImport("kernel32.dll")> _ Private Shared Function GetLastError() As UInt32 End Function #End Region Public Sub open() Dim dcbCommPort As New DCB Dim ctoCommPort As New COMMTIMEOUTS '// 打开串口 OPEN THE COMM PORT. hComm = CreateFile(PortNum, UInt32.Parse(GENERIC_READ Or GENERIC_WRITE), 0, 0, OPEN_EXISTING, 0, 0) '// 如果串口没有打开,就打开 IF THE PORT CANNOT BE OPENED, BAIL OUT. If hComm = INVALID_HANDLE_VALUE Then Throw (New ApplicationException("非法操作,不能打开串口!")) End If '// 设置通信超时时间 SET THE COMM TIMEOUTS. GetCommTimeouts(hComm, ctoCommPort) 'ref ctoCommPort.ReadTotalTimeoutConstant = ReadTimeout ctoCommPort.ReadTotalTimeoutMultiplier = 0 ctoCommPort.WriteTotalTimeoutMultiplier = 0 ctoCommPort.WriteTotalTimeoutConstant = 0 SetCommTimeouts(hComm, ctoCommPort) 'ref '// 设置串口 SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS. GetCommState(hComm, dcbCommPort) 'ref dcbCommPort.BaudRate = BaudRate dcbCommPort.flags = 0 '//dcb.fBinary=1; dcbCommPort.flags = dcbCommPort.flags Or (1) If Parity > 0 Then '//dcb.fParity=1 dcbCommPort.flags = dcbCommPort.flags Or (2) End If dcbCommPort.Parity = Parity dcbCommPort.ByteSize = ByteSize dcbCommPort.StopBits = StopBits If SetCommState(hComm, dcbCommPort) = False Then '//uint ErrorNum=GetLastError(); Throw (New ApplicationException("非法操作,不能打开串口!")) End If '//unremark to see if setting took correctly '//DCB dcbCommPort2 = new DCB(); '//GetCommState(hComm, ref dcbCommPort2); |