关于MSComm的事件 (急 急 急急) 在线等
各位高手 小弟在做串口编程的时候 发现自己的串口 串口已经打开 可是在捕获 MsComde 的事件的时候发现 它的事件始终是 5 不可能进入 2的状态 下面是小弟写的一些代码 希望高手指点 小弟现在很迷茫!
m_ctlMSComm.GetPortOpen() // m_ctlMSComm 为MsComm的对象
OpenPort()
{ if(m_ctlMSComm.GetPortOpen())
m_ctlMSComm.SetPortOpen(FALSE);
m_ctlMSComm.SetCommPort(m_1); //选择com1
if( !m_ctlMSComm.GetPortOpen())
m_ctlMSComm.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
m_ctlMSComm.SetSettings(m_strBaudRate); //波特率9600,无校验,8个数据位,1个停止位
m_ctlMSComm.SetRThreshold(1);
m_ctlMSComm.SetInputMode(1);
m_ctlMSComm.SetInputLen(1024); //设置当前接收区数据长度为0
m_ctlMSComm.GetInput();//先预读缓冲区以清除残留数据
}
在MsComm的事件处理如下
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(/*m_ctlMSComm.GetCommEvent()==5 || */m_ctlMSComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp = m_ctlMSComm.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=*(BYTE*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strReceive += bt; //加入接收编辑框对应字符串
}
m_strReceive += "\r\n";
AfxGetMainWnd()->SetWindowText(m_strReceive);
}
各位不够在加 小弟很着急 迷茫ing.....