我正在开发一个使用 MSComm ActiveX 与串口通信的接口:通过串口从传感器获取数据并显示在 VS 2005 的编辑框中。
但是每次运行程序,得到一定的数据后(大约1~2秒),程序就会卡住,我必须使用任务管理器停止。似乎缓冲区已满,但我已经使用 put_InBufferCount(0) 清除了缓冲区(如果我使用正确的话)。
另一个可能的原因是编辑框的大小 SetLimitText(10000000000000000); 但它也不起作用。
提前谢谢了!
这是 OnCommMscomm1() 中的代码
void CwtsDlg::OnCommMscomm1()
{
// TODO: Add your message handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //An 8-bit integer that is not signed.
CString strtemp;
if(m_MSComm.get_CommEvent()==2) //2 means there is data in the buffer
{
CString m_strRe;
variant_inp=m_MSComm.get_Input(); //Read buffer
m_MSComm.put_InBufferCount(0);//clear the buffer
safearray_inp=variant_inp; //ColeSafeArray Covert
len=safearray_inp.GetOneDimSize(); //get safe data length
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//convert to BYTE array
for(k=0;k<len;k++) //convert array to Cstring
{
BYTE bt=*(char*)(rxdata+k); //character
strtemp.Format(L"%02X ",bt); //put characters into temperary varibles with space
m_strRe+=strtemp; //the data in this buffer
}
AppendLineToMultilineEditCtrl(m_editReceive,m_strRe);//append data to edit box
}
}