各位高手好,小弟在使用VS2010 MFC 的MSCOMM 控件时出现了一个问题:
就是在OnComm函数里调用的Get_Input()函数读取不到缓存中的数据,经过验证,发现当接收区缓存数据不为0时程序能触发OnComm消息,可是当程序运行到Get_Input()函数时,OnComm()函数仿佛就直接从Get_Input()函数返回了,后面的代码也没有运行。同时,由于Get_Input()函数没有读取到缓存中的数据,因此即便我一次只给接收缓存发一个数据,程序也会不断调用OnComm()函数。请问可能的原因是什么?
初始化代码如下:
m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);
if(m_MSComm.get_PortOpen())
m_MSComm.put_PortOpen(FALSE);
m_MSComm.put_CommPort(15); //choose port 3
CString str;
if(!m_MSComm.get_PortOpen()){
m_MSComm.put_PortOpen(TRUE);
}
else
AfxMessageBox("cannot open serial port!");
m_MSComm.put_InBufferCount(0);
m_MSComm.put_OutBufferCount(0);
m_MSComm.put_Settings("9600,n,8,1");
m_MSComm.put_InputMode(1);
m_MSComm.put_RThreshold(1);
m_MSComm.put_InputLen(0);
OnComm函数代码如下
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp;
CString str;
if(m_MSComm.get_CommEvent()==2)
{
variant_inp = m_MSComm.get_Input();
m_MSComm.put_InBufferCount(0);
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for(k=0;k<len;k++){
safearray_inp.GetElement(&k,rxdata+k);
}
for(k=0;k<len;k++){
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
str+=strtemp;
}
m_MSComm.put_InBufferCount(0);
MessageBox(str);
}