//參數1表示每當串口接收緩沖區中有多於或等於1個字符時將引發壹個接收數據的OnComm事件
並且串口每次接收到的數據個數是不確定的,如果妳自己確定需要接收到多少個數據的話,就好辦了。
//全局變量
BYTE Comm_Packet_Len; //需要接收到的數據個數
BYTE Comm_DataBuffer[20]; //依次存放串口接收到的數據
long Comm_Packet_Index; //每次收到數據個數,並標誌數據應放在全局數組位置的索引
//每次處理完數據後清空,為下壹次接收做準備
void CEOLDlg::OnMscomm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len=0, k=0; //轉換為數組時使用的變量
BYTE rxdata[204]; //設置BYTE數組 An 8-bit integerthat is not signed.
CString strtemp; //字符型變量
int temp = 0; //臨時變量
unsigned char ecuchecksum = 0; //ecu回傳校驗碼
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++) //將ColeSafeArray型變量轉換為BYTE型數組
{
safearray_inp.GetElement(&k, rxdata + k);//轉換為BYTE型數組
}
for(temp = 0; temp < len; temp++)
{
Comm_DataBuffer[Comm_Packet_Index + temp] = rxdata[temp];
}
Comm_Packet_Index += len;
if(Comm_Packet_Index == Comm_Packet_Len)//接收到的數據個數等於
{
//處理接收到的數據
}
}
}