Я работаю над интерфейсом для связи с последовательным портом с помощью ActiveX MSComm: получать данные от датчика через последовательный порт и отображать в окне редактирования в 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
}
}
Задача ещё не решена.
Других решений пока нет …