用控制元件(CMSComm)讀串列埠程式碼(高效率,不同於網上常見的,決沒有抄襲)!
阿新 • • 發佈:2018-12-20
讀串列埠的程式碼在網上是鋪天蓋地,但他們幾乎完全是一樣的,第一個人寫出來的才是英雄,其它的不是。這段程式碼類似於下面: VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; //設定BYTE陣列 An 8-bit integerthat is not signed. CString strtemp; if(m_ctrlComm.GetCommEvent()==2) //事件值為2表示接收緩衝區內有字元 { ////////以下你可以根據自己的通訊協議加入處理程式碼 variant_inp=m_ctrlComm.GetInput(); //讀緩衝區 safearray_inp=variant_inp; //VARIANT型變數轉換為ColeSafeArray型變數 len=safearray_inp.GetOneDimSize(); //得到有效資料長度 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//轉換為BYTE型陣列 for(k=0;k<len;k++) //將陣列轉換為Cstring型變數 { BYTE bt=*(char*)(rxdata+k); //字元型 strtemp.Format("%c",bt); //將字元送入臨時變數strtemp存放 m_strRXData+=strtemp; //加入接收編輯框對應字串 } } UpdateData(FALSE); //更新編輯框內容 下面我先給出我的程式碼: VARIANT Rec_Data; int Data_Len; char Rec_Data_Array[2048]; if (m_ctrlComm.GetCommEvent() == 2) //事件值為2表示接收緩衝區內有字元 { Rec_Data = m_SerialCOM.GetInput(); int Data_Len = Rec_Data.parray->rgsabound->cElements; //取出一維的資料個數 memcpy(Rec_Data_Array, (char*) Rec_Data.parray->pvData, Data_Len); //拷貝出資料 Rec_Data_Array[Data_Len] = 0; } UpdateData(FALSE); //更新編輯框內容 我的程式碼有以下特點: 一:程式簡單; 二:也是最主要的,效率很高! 我沒有使用COleSafeArray類,大家知道,類要構造與析構,我敢保證,我上面的程式,在效率上,在第一段程式碼構造類的時候,我的程式碼已經收完資料了。另一點,是次要的,但要提一下,看看兩段程式申請的變數個數,程式的長度,可讀性,我的程式碼都應該較好!