我用的是mscomm控件,用的是中断接收函数(oncomm函数),我想在其他的函数里调用我在oncomm函数里接收的数据,接收到的数据被我放在一个全局数组里,帮帮我,谢谢,以下所以代码
void CBOOTLOADERDlg::OnOnCommMscomm1() //MsComm1中断
{
// TODO: Add your control notification handler code here
    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++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_DisplayArea+=strtemp; //加入接收编辑框对应字符串 
}
UpdateData(false);
}
}
以下是另一个函数里的代码,我想在以下这个代码中调用void CBOOTLOADERDlg::OnOnCommMscomm1() 里已经赋值的rxdata[0]
                                              if(rxdata[0]^NAK==0)
{
CString testNAK;
testNAK.Format("收到NAK"); 
                m_DisplayArea+=testNAK;
m_ctrlComm.SetOutput(COleVariant(m_Array));
            return;

                else if(rxdata[0]^ACK==0)
{
                seq++;
                    if((seq++)^255==0)
                    seq=0;            
                return;
}
            else if(rxdata[0]^CAN==0)
{
            m_ctrlComm.SetPortOpen(FALSE);
                MessageBox("PackSum>1,下位机取消接收"); 
com_flag=false;
               return;
}
            else
{
            //m_ctrlComm.SetPortOpen(FALSE); 
            //MessageBox("PackSum>1,错误!");
CString testelse;
testelse.Format("else"); 
                m_DisplayArea+=testelse;
com_flag=true;
            return;
}

解决方案 »

  1.   

    貌似你都没说你有什么问题啊?
    如果你定义的rxdata是全局数组的话,应该可以在你下面的那个函数中直接使用啊。
      

  2.   

    现在的问题就是只能调用一次,再以后即使接收到我要用的NAK,ACK,CAN,下面的函数也没反应啊,我在接收显示框里看到了接收的数据里有NAK,ACK,CAN
      

  3.   

    LZ或者你用线程试试看,不触发OnComm**()接收事件,启动串口com后,掉用单线程试着直接收数据并显示出来看看!
      

  4.   

    谢谢各位帮忙,问题解决,我用的就是楼上说的,现在不触发Oncomm接受事件,直接把这个函数给删了,谢谢各位,问题又出来了,我设计的是只要接受到马上显示,但老是在这个函数彻底完了后,他才显示接收到的所有数据,数据倒是没漏掉
      

  5.   

    在适当的时候用Sleep(1000)试下......
      

  6.   

    谢谢给位,我尝试下Sleep(1000)看行不
      

  7.   

    我用SLEEP函数了,还是不行啊,谁有此经历