久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6096|回復: 0
打印 上一主題 下一主題
收起左側

在使用SerialPort類做串口編程時 遇到的問題收集

[復制鏈接]
跳轉到指定樓層
樓主
ID:60266 發表于 2014-8-18 02:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
                        1:【轉】SerialPort收數據時調試時 出現的comstat未初始化
Run-Time Check Failure #3 - The variable 'comstat' is beingused without being initialized.

CSerialPort類在Visual C++ .NET 應用時會出現意想不到的問題。以《Visual C++/TuroboC串口通信編程實踐》(龔建偉 熊光明 著)一書中第二章的SerialPortTest程序為例,當在Visual C++.NET下編寫后之后,debug之后,會出現編譯錯誤:“operator+="不明確,MSDN解釋“為重載運算符定
義了多個可能的運算符。可能的解決方案:對一個或多個實際參數使用顯式轉換。”當將


LONG CSerialPortTestDlg::OnComm(WPARAM ch, LPARAM port)
{
m_strEditReceiveMsg +=ch;
UpdateData(FALSE); //將接收到的字符顯示在接收編輯框中
return 0;
}


中m_strEditReceiveMsg +=ch;改寫為m_strEditReceiveMsg+=char(ch);后,debug順利通過了。其實這個還不是CSerialPort類的問題。m_strEditReceiveMsg+=ch;改寫為m_strEditReceiveMsg+=char(ch) 是應該的,這樣更為嚴謹,因為在 OnComm(WPARAM ch, LPARAM port)函數中,ch 為WPARAM型數據,WPARAM型數據適應型很強,char(ch)將ch強制轉換為char型,更適合CString型,這應該算是VC.NET的進步。


   當將這個問題解決之后,編譯成功了。然后開始測試。向串口調試助手發送消息時一切正常。但從串口調試助手向SerialPortTest發送消息時,報錯了,說“comstatis being used withoutdefining",在SerialPort.CPP中,可以找到comstat的定義:COMSTAT comstat;但將光標指向comstat時右鍵轉到定義處或聲明處,卻均提示“未定義符號”,這便是CSerialPort類在VC.NET應用中的問題了。那該如何解決這個問題呢?在這,我們向大家提供兩種解決方案:


方案1: 改變項目配置屬性


   一種解決方案是改變基本運行時檢查(changing the runtime checks in projectsettings):在菜單Project->Projectproperties-> C/C++ -> Codegeneration-> Basic Runtime checks -->change to'Default',在中文版中是:項目-〉屬性-〉配置屬性-〉C/C++代碼生成-〉基本運行時檢查-〉設置為默認,當將基本運行時檢查改為默認之后,編譯自然順利通過了,向串口調試助手發送消息正常了,再從串口調試助手向SerialPortTest發送消息時,也正常了。


方案2:改變comstat變量屬性


    另一種解決方案是將CSerialPort.CPP中的COMSTATcomstat;改為static COMSTATcomstat;這樣改了之后,debug順利通過,然后調試,與串口調試助手相互發消息都OK了。為什么這樣就能解決呢?其實當你使用debug解決方案時,它的基本運行時檢查初始設置為:兩者(/RTC1,等同于/RTCsu),這個兩者是指:堆棧幀(/RTCs),未初始化的變量(/RTCu)。由于它要檢查未初始化的變量,所以將SerialPort.cpp中的COMSTATcomstat;改為static COMSTAT comstat;就可以正常使用CSerialPort類了。
    以上是在debug下的解決方案,當在Release編譯狀態時,你會發現并不需要將COMSTATcomstat;改為static COMSTATcomstat;就能編譯成功并且發送接收消息正常。其實,在Release下,它的基本運行時檢查初始設置已為默認。這應該也算是第一種解決方案之內。
    而當你將它設置為兩者(/RTC1,等同于/RTCsu)時,不論是否將COMSTAT comstat;改為static COMSTATcomstat;,編譯都不能通過,報錯““cl.exe”返回的結果有誤。",這個應該是屬于Release的問題了,另當別論了。
   CSerialPort類是一個用起來很方便的類,在VisualC++.NET應用時,遇到一些問題,上面是解決方案是否妥當,請大家也去試試,說不定有更好的解決方案。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区不卡视频 | 在线免费观看成人 | 亚洲一区二区三区观看 | 久久精品美女 | 亚洲第一网站 | 成人h动漫亚洲一区二区 | 欧美一区二区免费电影 | 精品日韩在线 | 午夜精品久久久久久久久久久久久 | av在线免费播放 | 国产精品视频久久久 | 日韩美女一区二区三区在线观看 | 福利色导航| 国产在线精品一区二区三区 | 欧美精品国产精品 | 欧美一极视频 | 在线视频一区二区三区 | 在线免费91 | 在线观看视频91 | 中文字幕av一区 | 国产成人精品一区二区三区网站观看 | 国产欧美日韩一区二区三区在线 | 国产良家自拍 | 欧美日韩在线一区二区三区 | 国产精品一区二区在线 | 国产一区二区三区免费 | av网站在线播放 | 性视频一区 | 国产精品一区二区三 | 一区二区三区在线免费 | 中文字幕在线免费 | 国产一区三区视频 | 免费在线一区二区 | 亚洲免费观看 | 中文字幕在线中文 | 91 久久 | 精品免费在线 | 国产高清在线精品 | 国产美女一区二区 | 日本 欧美 国产 | 一级免费毛片 |