乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      SerialPort收數(shù)據(jù)時(shí)出現(xiàn)的BUGcomstat is being used without defining

       JasonQue 2011-06-27

      SerialPort收數(shù)據(jù)時(shí)出現(xiàn)的BUGcomstat is being used without defining

      (2011-05-08 20:58:12)
      標(biāo)簽: 

      雜談

      -----

      采用如下的方法,還是只能解決程序不會(huì)出現(xiàn)報(bào)錯(cuò)退出。不能解決接收串口數(shù)據(jù)的問(wèn)題。實(shí)際上,接收到的串口數(shù)據(jù)是亂碼,而且接受一會(huì)就不再是亂碼。但是緩沖區(qū)實(shí)在是太大。

      -----

      轉(zhuǎn)載自 qiuzhongqun

      很是郁悶搞了一中午以為是自己的程序?qū)懙挠袉?wèn)題。

       

      報(bào)的這個(gè)錯(cuò)誤讓我實(shí)在想不通。百度也找不到什么答案。最后上GOOGLE才知道什么原因。。。

      害的我苦苦搞了一個(gè)大早上。

       

      Run-Time Check Failure #3 - The variable 'comstat' is being used without being initialized.

      CSerialPort類在Visual C++ .NET 應(yīng)用時(shí)會(huì)出現(xiàn)意想不到的問(wèn)題。以《Visual C++/Turobo C串口通信編程實(shí)踐》(龔建偉 熊光明 著)一書中第二章的SerialPortTest程序?yàn)槔?dāng)在Visual C++ .NET下編寫后之后,debug之后,會(huì)出現(xiàn)編譯錯(cuò)誤:“operator+="不明確,MSDN解釋“為重載運(yùn)算符定
      義了多個(gè)可能的運(yùn)算符??赡艿慕鉀Q方案:對(duì)一個(gè)或多個(gè)實(shí)際參數(shù)使用顯式轉(zhuǎn)換?!碑?dāng)將


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


      中m_strEditReceiveMsg +=ch;改寫為m_strEditReceiveMsg +=char(ch);后,debug順利通過(guò)了。其實(shí)這個(gè)還不是CSerialPort類的問(wèn)題。m_strEditReceiveMsg+=ch;改寫為m_strEditReceiveMsg +=char(ch) 是應(yīng)該的,這樣更為嚴(yán)謹(jǐn),因?yàn)樵?OnComm(WPARAM ch, LPARAM port)函數(shù)中,ch 為 WPARAM 型數(shù)據(jù),WPARAM型數(shù)據(jù)適應(yīng)型很強(qiáng),char(ch)將ch強(qiáng)制轉(zhuǎn)換為char型,更適合CString型,這應(yīng)該算是VC.NET的進(jìn)步。


          當(dāng)將這個(gè)問(wèn)題解決之后,編譯成功了。然后開始測(cè)試。向串口調(diào)試助手發(fā)送消息時(shí)一切正常。但從串口調(diào)試助手向SerialPortTest發(fā)送消息時(shí),報(bào)錯(cuò)了,說(shuō)“comstat is being used without defining",在SerialPort.CPP中,可以找到comstat的定義:COMSTAT comstat; 但將光標(biāo)指向comstat時(shí)右鍵轉(zhuǎn)到定義處或聲明處,卻均提示“未定義符號(hào)”,這便是CSerialPort類在VC.NET應(yīng)用中的問(wèn)題了。那該如何解決這個(gè)問(wèn)題呢?在這,我們向大家提供兩種解決方案:


      方案1: 改變項(xiàng)目配置屬性


          一種解決方案是改變基本運(yùn)行時(shí)檢查(changing the runtime checks in project settings):在菜單Project->Project properties-> C/C++ -> Code generation-> Basic Runtime checks --> change to 'Default',在中文版中是:項(xiàng)目-〉屬性-〉配置屬性-〉C/C++代碼生成-〉基本運(yùn)行時(shí)檢查-〉設(shè)置為默認(rèn),當(dāng)將基本運(yùn)行時(shí)檢查改為默認(rèn)之后,編譯自然順利通過(guò)了,向串口調(diào)試助手發(fā)送消息正常了,再?gòu)拇谡{(diào)試助手向SerialPortTest發(fā)送消息時(shí),也正常了。


      方案2:改變comstat變量屬性


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


        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多