我在使用MSComm类进行串口编程的时候,编译通过。使用“串口调试助手v2.1”发送数据,但是程序收不到,而且发送数据的时候总会出现“属性只读”的异常!有谁能告诉我这个“属性只读”的异常是怎么产生的?我应该怎么解决?请各位大侠指点小弟,特别感谢了!关键代码如下:大概意思是从串口取得单片机送来的温度值,然后现实在Edit里;并且把Edit中输入的温度域值送往串口的单片机。BOOL CMy2COMDlg::OnInitDialog()
{
………………
m_wnd_2_COM1.SetPortOpen(3);
m_wnd_2_COM1.SetSettings("1200,n,8,1");//波特率1200,无校验,8个数据位,1个停止位
m_wnd_2_COM1.SetInputMode(1); //1:表示以二进制方式检取数据
m_wnd_2_COM1.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将 //引发一个接收数据的OnComm事件
m_wnd_2_COM1.SetInputLen(1); //每接收1个字符就引发onCom事件
if(!m_wnd_2_COM1.GetPortOpen())
m_wnd_2_COM1.SetPortOpen(TRUE); //打开端口
m_wnd_2_COM1.GetInput(); //先预读缓冲区以清除残留数据
m_wnd_2_COM1.SetCTSHolding(TRUE);
m_wnd_2_COM1.SetCDHolding(FALSE);
m_wnd_2_COM1.SetDSRHolding(FALSE);………………
}
void CMy2COMDlg::OnCommMscomm1() 
{
// TODO: Add your control notification handler code here
switch(m_ctrlComm.GetCommEvent())
{
case 1: //comEvSend发送事件
m_ctrlComm.SetOutput(COleVariant("t"));
m_ctrlComm.SetOutput(COleVariant(m_tem_top));
m_ctrlComm.SetOutput(COleVariant("b"));
m_ctrlComm.SetOutput(COleVariant(m_tem_bottom));
break; case 2: //comEvReseiv接收事件
VARIANT tempR;
int k;
k=m_ctrlComm.GetInputLen();
if(k>0)
{
tempR = m_ctrlComm.GetInput();
m_recent_tem = tempR.bVal; //把接收到的数据经转换格式后赋给编辑框的变量??????? if(m_recent_tem<m_tem_bottom||m_recent_tem>m_tem_top) //发送报警信号
{
m_ctrlComm.SetOutput(COleVariant("a"));
} CMy2COMDlg::OnChangeRec(); //显示当前温度
} break; case 1009: //comEventRxity奇偶校验错误事件 break; default:
break;
}

}void CMy2COMDlg::OnSendLimitLine()  // 发送预设的温度上下限
{
CMy2COMDlg::OnSetTop();
CMy2COMDlg::OnSetBottom();
m_wnd_2_COM1.SetCommEvent(1);
CMy2COMDlg::OnCommMscomm1();
}

解决方案 »

  1.   

    提示哪个文件为“只读”,就把它的属性上“只读”那个勾去掉不OK么?
    另外,你这样写的在GetInput()的时候会有内存泄露,请参看这篇文章
    http://book.77169.org/data/web5005/20050227/20050227__3743154.html
      

  2.   

    GetInput的问题我看过了,十分感谢!但那个不是文件的只读,是我发送一个数据到串口的时候提示的“属性只读”,应该是“ComSetNotSupported         383   属性只读”系统捕获的异常!
    请指教。
      

  3.   

    http://www.gjwtech.com/
    这个问题我还没遇到过,也不清楚,建议你去龚老大的主页去学习下吧(上面的链接就是)
    我也有一些关于串口的项目,希望能交个朋友,以后多交流,我的邮箱,[email protected]
    (问题解决了记得告诉我哦)
      

  4.   

    建议使用COM API 编程,稳定很多
      

  5.   

    我不会COM API编程,有没有学习的好的网站或电子书介绍一下呢?谢谢yuanbocsut!龚老师的网站信息正在找相关的信息学习,谢谢wawaku!
      

  6.   

    是那个m_wnd_2_COM1.SetCommEvent(1)上的问题,把这行去掉应该就行了,不过去掉之后就不知道怎么调试程序了!我也正在学习这方面的东西,有什么交流一下吧,我的qq是81350635!顺便说一下,我们也是做温控系统的,呵呵