我用的是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;
}
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;
}
如果你定义的rxdata是全局数组的话,应该可以在你下面的那个函数中直接使用啊。