滑鼠移到畫面上會造成serial port抓到不明資料 |
尚未結案
|
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
各位前輩好~ 小弟最近在寫一個有用到com port通訊的程式
語言是BCB 參考了一些網路上的資料之後 利用CreateFile的方式來開啟com port進行通訊 下面是程式碼 [code cpp] void TForm1::ConnectRS232(void)//連接鐳射訊號線 { AnsiString ComName = "COM" IntToStr(CurrentHW.ComIndex); AnsiString TempSetting=""; ReadFile( com_handle , buffer , read_bytes ,&read_bytes,NULL); //由com2讀取1byte AnsiString Temp = buffer; if(Temp.AnsiCompare("")!=0) { //不重要 } } [/code] 簡單來說 就是開啟com port後用一個timer不斷去偵測是否有資料傳送進來 經過另外一台電腦連線測試後,的確可以成功的抓到另外一邊送來的資料 但事出現了一個問題就是 "我的滑鼠移動到程式畫面上時,ReadFile也會讀到一些類似亂碼的資料" 難道說滑鼠的訊息會寫到com port裡面嗎?? 不知道有沒有人知道這樣該如何解決 感恩~!! |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
MOUSE的訊息當然是不會傳入com port。看了你的程式,覺得你該注意ReadFile的正確使用方式:
ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ; 其中第三個參數是指,你"期望"讀多少bytes,而第四個參數是當函式結束時,你實際是收到幾個byte。這個參數很重要。 當實際收到等於0時,表有錯誤。當實際小於預期時,你要自行去組裝(把上回的和這回的組成一個你要的資料,比如說上回收3bytes,這回收7bytes,合起來10bytes是你要的)。當實際等於你預期的,那就沒什麼特別的… 所以,第三與第四個參數是不能同一個的!! 且要依第四個參數來做對應的策略。 你用timer,很有可能是程式,或系統忙不過來,導致一次沒有收足你要的。而你卻以為你「總是」收到你要的數量… 還有一點要注意,你buffer設10,但你預期的數量是多少? 若是不明確,那可能也會有問題,比如說預期11,那程式就爆了。所以,buffer的大小一般是要與預期的值一樣,或者更大! 先以這個方向去查看看吧~
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |