在 MFC 對話框專案中實現串口通訊,通常會自訂一個成員函數(如 connectSPort)封裝 MSComm 控件初始化邏輯,並透過 DDX/DDV 機制將控件與變數綁定。
CDemo1Dlg)宣告 MSComm CommDriver;(需先在工具箱註冊 MSComm32.ocx 並拖放到對話框)。IDC_MSCOMM1 → Add Variable → Category: Control → Variable: m_comm(或直接用 CommDriver)。connectSPort 函數:
int CDemo1Dlg::connectSPort(int portNum) {
CommDriver.put_CommPort(portNum);
CommDriver.put_InputMode(1); // 二進位模式
CommDriver.put_InBufferSize(1024);
CommDriver.put_OutBufferSize(512);
CommDriver.put_Settings(_T("9600,n,8,1"));
if (!CommDriver.get_PortOpen())
CommDriver.put_PortOpen(TRUE); // 開啟串口
CommDriver.put_RThreshold(1); // 收到 1 字元觸發 OnComm
CommDriver.put_InputLen(0);
CommDriver.get_Input(); // 清空殘留緩衝區
return 0;
}
OnComm 事件:在對話框類別新增 OnCommMscomm1 訊息處理器,讀取 CommDriver.get_Input() 解析資料。MSComm 為 ActiveX 控件,需目標機安裝 MSCOMM32.OCX 並註冊(regsvr32)。CreateFile/ReadFile/WriteFile 原生 API 或第三方庫(如 Serial),穩定性更高。