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)對於沒有用到的屬性/方法,直接把相關代碼剔除就好了,比如,你只用到了發送數據,那麼與接收相關的設置就不必寫了(當然,寫了也沒倒扣分),以免因爲疏忽發生不好領會的運行時錯誤。

    當然,這個控件顯然微軟後面沒有很花心思,導入後並沒有附帶的直接生成類,要手動添加,手動在頭文件中聲明,並手動定義變量,手動創建類對象。(話說,這麼麻煩,比直接用第三方的類庫,也只稍微強一點點了,就是比較有信心,這個畢竟是微軟自己發佈的)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章