首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC6 使用 MSComm 控制項實現序列埠通訊:從元件註冊到收發實作

     編輯:關於VC++

MSComm 控制項簡介

Microsoft Communications Control 6.0 (MSComm32.ocx) 是 Windows 經典的序列埠 ActiveX 控制項,封裝了底層 API,讓序列埠程式設計變得極簡單。本文詳細記錄從元件安裝、專案整合、屬性設定到收發程式碼的完整流程。

元件安裝與專案整合步驟

  1. 開啟 VC++ 6.0,建立「對話方塊基礎的 MFC 應用程式」
  2. 選單 Project → Add To Project → Components and Controls
  3. 雙擊 Registered ActiveX Controls 資料夾
  4. 選取 Microsoft Communications Control, version 6.0,點擊 Insert
  5. 確認類別精靈對話框,點擊 OK 完成

若找不到控制項怎麼辦?

執行 開始 → 執行,輸入:

regsvr32 mscomm32.ocx

註冊成功後重新開啟 Components and Controls 對話框即可找到。

控制項屬性設定

將控制項拖入對話方塊,用 ClassWizard 加入成員變數 m_msCom,設定關鍵屬性:

屬性設定值說明
CommPort1序列埠號 (視實際硬體而定)
InputMode1 - Binary以二進位模式讀取資料
RThreshold1接收緩衝區 ≥1 字元觸發 OnComm 事件
其他預設值波特率、資料位、停止位、奇偶校驗等

或在 OnInitDialog() 以程式碼設定:

m_msCom.SetCommPort(1);
if (m_msCom.GetPortOpen()) m_msCom.SetPortOpen(FALSE);
m_msCom.SetInputMode(1);   // Binary 模式
m_msCom.SetRThreshold(1);  // 觸發閾值

開啟序列埠與發送資料

// OnInitDialog 中開啟序列埠
m_msCom.SetPortOpen(TRUE);
m_msCom.GetInput();  // 預讀清除殘留資料

// 發送資料 (任意位置呼叫)
COleVariant txData("Hello Serial");
m_msCom.SetOutput(txData);

接收資料:OnComm 事件處理

  1. 雙擊控制項,加入事件處理函數 OnOnCommMscomm1
  2. 實作接收邏輯:
void CMyDlg::OnOnCommMscomm1() {
    if (m_msCom.GetCommEvent() == 2) {  // 事件 2 = 接收緩衝區有字元
        Sleep(100);  // 等待資料完整到達 (視波特率調整)
        
        VARIANT rec_data = m_msCom.GetInput();  // 讀取緩衝區
        int data_len = rec_data.parray->rgsabound->cElements;
        
        char cData[1024];
        memcpy(cData, (char*)rec_data.parray->pvData, data_len);
        cData[data_len] = '\0';  // 字串結束
        
        // cData 即為接收到的字串
        m_list.AddString(cData);  // 顯示於 ListBox
    }
}

關鍵技術點總結

項目說明
事件驅動模型RThreshold 觸發 OnComm 事件,無需輪詢
VARIANT 資料格式SafeArray 封裝,需透過 parray->pvData 存取實際資料
二進位模式InputMode=1 可正確處理 0x00 等控制字元
Sleep(100) 技巧低波特率下確保封包完整,高速傳輸需改用封包協議

優缺點評估

  • 優點:程式碼極少、開發快速、Visual 介面設定、自動事件通知
  • 缺點:部署需附帶 OCX、靈活度低於 API、高效能/複雜協議場景受限

適合快速原型、教學、簡單儀器控制等場景。專案部署時記得將 mscomm32.ocx 納入安裝包並註冊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved