⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lc_bcb_93.html

📁 C++Builder教学大全
💻 HTML
字号:


<html>

<head>

<title>用C++Builder如何对串行口COM1或COM2进行读写操作</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>



<body>

<p align=center><b>用Builder C++如何对串行口COM1或COM2进行读写操作 </b><br>

</p>

<p><br>

  <br>

  一个通讯类(对串口的读写),可以不用做修改就用在程序中 <br>

  <br>

  TSerialPort.h <br>

  <br>

  #ifndef __SERIALPORT_H__ <br>

  #define __SERIALPORT_H__ <br>

  <br>

  #define WM_COMM_BREAK_DETECTED WM_USER+1 // A break was detected on input. <br>

  #define WM_COMM_CTS_DETECTED WM_USER+2 // The CTS (clear-to-sennd) sig <br>

  nal changed state. <br>

  #define WM_COMM_DSR_DETECTED WM_USER+3 // The DSR (data-set-reaady) si <br>

  gnal changed state. <br>

  #define WM_COMM_ERR_DETECTED WM_USER+4 // A line-status error ooccurre <br>

  d. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY. <br>

  <br>

  #define WM_COMM_RING_DETECTED WM_USER+5 // A ring indicator was etec ted. <br>

  #define WM_COMM_RLSD_DETECTED WM_USER+6 // The RLSD (receive-lin <br>

  -sig <br>

  nal-detect) signal changed state. <br>

  #define WM_COMM_RXCHAR WM_USER+7 // A character w <br>

  s received and pl <br>

  aced in the input buffer. <br>

  #define WM_COMM_RXFLAG_DETECTED WM_USER+8 // The event character w <br>

  s <br>

  received and placed in the input buffer. <br>

  #define WM_COMM_TXEMPTY_DETECTED WM_USER+9 // The last character in <br>

  th <br>

  e output buffer was sent. <br>

  <br>

  class TSerialPort <br>

  { <br>

  public: <br>

  // contruction and destruction <br>

  TSerialPort(); <br>

  virtual ~TSerialPort(); <br>

  <br>

  // port initialisation <br>

  BOOL InitPort(TForm* pPortOwner, UINT portnr = 1, UINT baud = <br>

  19200, <br>

  char parity = 'N', UINT databits = 8, UINT stopsbits = 1, DWORD dwCom <br>

  mEvents = EV_RXCHAR | EV_CTS, UINT nBufferSize = 512); <br>

  <br>

  // start/stop comm watching <br>

  BOOL StartMonitoring(); <br>

  BOOL RestartMonitoring(); <br>

  BOOL StopMonitoring(); <br>

  <br>

  DWORD GetWriteBufferSize(); <br>

  DWORD GetCommEvents(); <br>

  DCB GetDCB(); <br>

  <br>

  void WriteToPort(char* string); <br>

  <br>

  protected: <br>

  // protected memberfunctions <br>

  void ProcessErrorMessage(char* ErrorText); <br>

  static DWORD _stdcall CommThread(LPVOID pParam); <br>

  static void ReceiveChar(TSerialPort* port, COMSTAT comstat); <br>

  static void WriteChar(TSerialPort* port); <br>

  <br>

  // thread <br>

  HANDLE m_HThread; <br>

  <br>

  // synchronisation objects <br>

  CRITICAL_SECTION m_csCommunicationSync; <br>

  BOOL m_bThreadAlive; <br>

  <br>

  // handles <br>

  HANDLE m_hShutdownEvent; <br>

  HANDLE m_hComm; <br>

  HANDLE m_hWriteEvent; <br>

  <br>

  // Event array. <br>

  // One element is used for each event. There are two event handles fo <br>

  r each port. <br>

  // A Write event and a receive character event which is located in th <br>

  e overlapped structure (m_ov.hEvent). <br>

  // There is a general shutdown when the port is closed. <br>

  HANDLE m_hEventArray[3]; <br>

  <br>

  // structures <br>

  OVERLAPPED m_ov; <br>

  COMMTIMEOUTS m_CommTimeouts; <br>

  DCB m_dcb; <br>

  <br>

  // owner window <br>

  TForm* m_pOwner; <br>

  <br>

  // misc <br>

  UINT m_nPortNr; <br>

  char* m_szWriteBuffer; <br>

  DWORD m_dwCommEvents; <br>

  DWORD m_nWriteBufferSize; <br>

  }; <br>

  <br>

  #endif __SERIALPORT_H__ <br>

  <br>

  <br>

  TSerialPort.cpp <br>

  <br>

  #include <br>

  #pragma hdrstop <br>

  #include "SerialPort.h" <br>

  #include <br>

  #include <br>

  #pragma package(smart_init) <br>

  // <br>

  // Constructor <br>

  // <br>

  TSerialPort::TSerialPort() <br>

  { <br>

  m_hComm = NULL; <br>

  <br>

  // initialize overlapped structure members to zero <br>

  m_ov.Offset = 0; <br>

  m_ov.OffsetHigh = 0; <br>

  <br>

  // create events <br>

  m_ov.hEvent = NULL; <br>

  m_hWriteEvent = NULL; <br>

  m_hShutdownEvent = NULL; <br>

  <br>

  m_szWriteBuffer = NULL; <br>

  <br>

  m_bThreadAlive = false; <br>

  } <br>

  <br>

  // <br>

  // Delete dynamic memory <br>

  // <br>

  TSerialPort::~TSerialPort() <br>

  { <br>

  do <br>

  { <br>

  SetEvent(m_hShutdownEvent); <br>

  } while (m_bThreadAlive); <br>

  <br>

  delete [] m_szWriteBuffer; <br>

  } <br>

  <br>

  // <br>

  // Initialize the port. This can be port 1 to 4. <br>

  // <br>

  BOOL TSerialPort::InitPort(TForm* pPortOwner, // the o</p>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -