程序分为两个部分。 /* MySerialPort.h 封装了串口通讯的windows API。 支持异步操作串口。 */ #pragma once #include namespace jeff_class { class CMySerialPort { public: CMySerialPort(); ~CMySerialPort(); BOOL Open ( int nPort = 2, int nBaud = 9600 ); BOOL Close ( void ); int ReadData ( void *, int ); int SendData ( const char *, int ); int ReadDataWaiting ( void ); // 查询缓冲区内是否有未读取的数据 BOOL IsOpened ( void ) { return ( m_bOpened ); } protected: BOOL WriteCommByte ( unsigned char ); // 内部实现,向串口写数据 HANDLE m_hIDComDev; OVERLAPPED m_OverlappedRead, m_OverlappedWrite; BOOL m_bOpened; }; } / ****MySerialPort.cpp***********/ #include "MySerialPort.h" #include // 不使用读超时 #define TIMEOUT_READ_INTERVAL 0xFFFFFFFF #define TIMEOUT_READ_TOTAL_MULTIPLIER 0 #define TIMEOUT_READ_TOTAL_CONSTANT 0 // 写超时为秒 #define TIMEOUT_WRITE_TOTAL_MULTIPLIER 0 #define TIMEOUT_WRITE_TOTAL_CONSTANT 5000 // 推荐的输入/输出缓冲区(注意:实际值由系统设置) #define BUFFER_INPUT_RECOMMEND 10000 #define BUFFER_OUTPUT_RECOMMEND 10000 // 异步读取/写入操作时等待事件的超时时间 #define TIMEOUT_READCOMM_EVENT 4000 #define TIMEOUT_WRITECOMM_EVENT 2000 // 一些通讯协议使用的宏 #define FC_DTRDSR 0x01 #define FC_RTSCTS 0x02 #define FC_XONXOFF 0x04 #define ASCII_BEL 0x07 #define ASCII_BS 0x08 #define ASCII_LF 0x0A #define ASCII_CR 0x0D #define ASCII_XON 0x11 #define ASCII_XOFF 0x13 jeff_class::CMySerialPort::CMySerialPort() { memset ( &m_OverlappedRead, 0, sizeof ( OVERLAPPED ) ); memset ( &m_OverlappedWrite, 0, sizeof ( OVERLAPPED ) ); m_hIDComDev = NULL; m_bOpened = FALSE; } jeff_class::CMySerialPort::~CMySerialPort() { Close(); } // 打开串口 BOOL jeff_class::CMySerialPort::Open ( int nPort, int nBaud ) { if ( m_bOpened ) return TRUE; TCHAR szPort[50]; TCHAR...