1. 程式人生 > >VC++ VS2010對比VC6 串列埠控制元件的方法變更

VC++ VS2010對比VC6 串列埠控制元件的方法變更

    這兩天整理以往專案程式碼,正好朋友有個win平臺下串列埠專案需求,不過他對win下面的開發IDE平臺和MFC架構都沒有概念,於是就開貼對部分demo做了手把手的備註。

    朋友使用的時候碰到了一些問題,這裡梳理一下。也因為MSDN裡面沒有對VC++下面的CMSCOMM(或者新版本叫IMSCOMM)做出說明,這樣有一份可用的相對正確的參考就很重要。

    1)部分原始碼是在VC6下面的,用VS2010可以直接相容開啟低版本的工作環境檔案.DSW,並且匯入老版本的控制元件。在這種情況下,沿用原來的程式碼,是OK的,可以除錯通過;

    2)不過如果在VS2010的環境下,按照教程一步一步的做,新增完MSCOMM控制元件後,會發現原來的部分方法/函式報錯。這是因為,在預設生成的標頭檔案中,方法的引用名稱有了變化;如果直接COPY程式碼過來就沒法編譯了。這裡舉幾個常用的方法,做一下對應 -

    m_ComPort.put_CommPort(1);    // 選擇串列埠號
VS    m_ComPort.SetCommPort(1);

    m_ComPort.put_InBufferSize(1024);    //接收緩衝區
VS    m_ComPort.SetInBufferSize(1024);

    m_ComPort.put_OutBufferSize(1024);    //傳送緩衝區
VS    m_ComPort.SetOutBufferSize(1024);

    m_ComPort.put_InputLen(0);    //設定當前接收區資料長度為0,表示全部讀取
VS    m_ComPort.SetInputLen(0);

    m_ComPort.put_InputMode(1);    //以二進位制方式讀寫資料
VS    m_ComPort.SetInputMode(1);

    m_ComPort.put_RThreshold(1);//接收緩衝區有大於等於1個字元時,將引發接收資料的OnCommMscomm事件
VS    m_ComPort.SetRThreshold(1);

    m_ComPort.put_SThreshold(1);
VS    m_ComPort.SetSThreshold(1);

    m_ComPort.put_Settings(_T("9600,n,8,1")); //設定波特率等引數
VS    m_ComPort.SetSettings("9600,n,8,1");

    m_ComPort.get_PortOpen()    //檢查串列埠是否開啟
VS    m_ComPort.GetPortOpen()

    m_ComPort.put_PortOpen(TRUE);    //開啟串列埠
VS    m_ComPort.SetPortOpen(TRUE);

    m_ComPort.put_OutBufferCount(0);
VS    m_ComPort.SetOutBufferCount(0);

    3)對於部分“綠色版本”的IDE平臺,如VC2010,可能裡面並沒有整合MSCOMM控制元件,那麼要額外的註冊,這種情況下,要麼裝兩個IDE,回到VC6下面匯入控制元件完畢,再用VS2010來相容開啟,要麼直接註冊控制元件,並在VS2010下的程式碼裡面注意變更寫法。都可以。

    4)對於沒有用到的屬性/方法,直接把相關程式碼剔除就好了,比如,你只用到了傳送資料,那麼與接收相關的設定就不必寫了(當然,寫了也沒倒扣分),以免因為疏忽發生不好領會的執行時錯誤。

    當然,這個控制元件顯然微軟後面沒有很花心思,匯入後並沒有附帶的直接生成類,要手動新增,手動在標頭檔案中宣告,並手動定義變數,手動建立類物件。(話說,這麼麻煩,比直接用第三方的類庫,也只稍微強一點點了,就是比較有信心,這個畢竟是微軟自己釋出的)