void CCommRDlg::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
VARIANT m_Input1;
COleSafeArray m_Input2;
long length,i;
BYTE data[1024];
CString str;
if(m_comm.get_CommEvent()==2)
{
m_Input1=m_comm.get_Input();
m_Input2=m_Input1;
length=m_Input2.GetOneDimSize();
for(i=0;i<length;i++)
m_Input2.GetElement(&i,data+i);
for(i=0;i<length;i++)
{
char a=*(char *)(data+i);
str.Format(_T("%c"),a); sText+=str;
m_ReceiveData.SetWindowText(sText);

}
}
UpdateData(false);
}void CCommRDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码

if(!m_comm.get_PortOpen())
{
m_comm.put_PortOpen(true); }
UpdateData(true);



}void CCommRDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
m_ReceiveData.EmptyUndoBuffer();
UpdateData(false);
}这是我在MFC中用mscomm控件写的接受程序,
我接受传感器发来的数据,可是没有显示,请教高手

解决方案 »

  1.   

    这肯定是不对的啦,要想用%c显示,就要跳过那些不可显示的字符以及00等等,要不就转换成16进制字符串进行显示char a=*(char *)(data+i);
    str.Format(_T("%.2X "),a);sText+=str;
      

  2.   

    我用断点调试 程序就不响应这个函数void CCommRDlg::OnCommMscomm1()  有哪位知道  请赐教
      

  3.   

    http://www.yesky.com/208/1813208.shtml
    http://embeded-life.blog.163.com/blog/static/105932519200941001844838/
    http://hi.baidu.com/%C7%E0%C8%B80401/blog/item/c239948a9a2bd0cffc1f1072.html
    参考
      

  4.   

    好像是你对串口控件的设置有问题,少了不少东西,下面的是我一个程序里设置串口的代码,你参考下:
               if(m_Com.GetPortOpen())
    m_Com.SetPortOpen(FALSE); m_Com.SetCommPort(m_nPort);       //选择com1
    if( !m_Com.GetPortOpen())
    m_Com.SetPortOpen(TRUE);//打开串口
    else
    AfxMessageBox("cannot open serial port"); m_Com.SetSettings(m_strSettings); //波特率9600,无校验,8个数据位,1个停止位
    m_Com.SetRThreshold(1); 
    //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
    m_Com.SetInputMode(1);
    m_Com.SetInputLen(0);  //设置当前接收区数据长度为0
    m_Com.GetInput();//先预读缓冲区以清除残留数据
      

  5.   

    这些都没问题  程序改过了  还是不行。
    我用单步调试,每次都是在if(m_comm.get_CommEvent()==2)
    就跳过了  好像就没有消息响应
      

  6.   

    BOOL CComDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
                ``````` if(m_comm.get_PortOpen()) m_comm.put_PortOpen(FALSE); m_comm.put_CommPort(3); //选择com1 if( !m_comm.get_PortOpen()) m_comm.put_PortOpen(TRUE);//打开串口 else AfxMessageBox(_T("cannot open serial port"));
            m_comm.put_InBufferSize(1024); //接收缓冲区
    m_comm.put_OutBufferSize(512);//发送缓冲区 m_comm.put_Settings(_T("9600,n,8,1")); //波特率9600,无校验,8个数据位,1个停止位 m_comm.put_InputMode(1); //1:表示以二进制方式检取数据 m_comm.put_RThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_comm.put_InputLen(0); //设置当前接收区数据长度为0 m_comm.get_Input();//先预读缓冲区以清除残留数据
    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }编译通过了 没有问题,在运行调试的时候就会发错误,如下
    Com.exe 中的 0x7c812afb 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012f1f4 处的 COleDispatchException。
    Warning: Uncaught exception in WindowProc (returning 0).
    单步调试在  m_comm.put_InBufferSize(1024); //接收缓冲区
    m_comm.put_OutBufferSize(512);//发送缓冲区
    出现问题,是内存溢出吗,怎么修改啊,高人指点
      

  7.   

    注释掉以后不显示接收的数据,还有就是不触发oncomm事件,很郁闷
      

  8.   

    m_comm.get_CommEvent()==3,为什么了 救命啊