CSerialPort類接收資料時comstat未初始化

來源:互聯網
上載者:User

原文出處:http://blog.sina.com.cn/s/blog_6c1922aa01013jro.html

 

 

從串口調試助手向SerialPortTest發送訊息時,報錯了,說“comstat
is being used without defining",在SerialPort.CPP中,可以找到comstat的定義:COMSTAT comstat; 但將游標指向comstat時右鍵轉到定義處或聲明處,卻均提示“未定義符號”,這便是CSerialPort類在VC.NET應用中的問題了。那該如何解決這個問題呢?在這,我們向大家提供兩種解決方案:


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


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


方案2:改變comstat變數屬性


     另一種解決方案是將CSerialPort.CPP中的COMSTAT comstat;改為static
COMSTAT comstat;這樣改了之後,debug順利通過,然後調試,與串口調試助手相互發訊息都OK了。為什麼這樣就能解決呢?其實當你使用debug解決方案時,它的基本運行時檢查初始設定為:兩者(/RTC1,等同於 /RTCsu),這個兩者是指:堆疊框架(/RTCs),未初始化的變數(/RTCu)。由於它要檢查未初始化的變數,所以將SerialPort.cpp中的COMSTAT comstat;改為static COMSTAT comstat;就可以正常使用CSerialPort類了。
     以上是在debug下的解決方案,當在Release編譯狀態時,你會發現並不需要將COMSTAT comstat;改為static COMSTAT comstat;就能編譯成功並且發送接收訊息正常。其實,在Release下,它的基本運行時檢查初始設定已為預設。這應該也算是第一種解決方案之內。
    而當你將它設定為兩者(/RTC1,等同於 /RTCsu)時,不論是否將COMSTAT comstat;改為static COMSTAT comstat;,編譯都不能通過,報錯““cl.exe”返回的結果有誤。",這個應該是屬於Release的問題了,另當別論了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.