在程序中,我用的是MSComm控件,其中一个主要属性如下:SetSettings    设置并返回波特率,奇偶校验,数据位长度,停止位长度。如:SetSettings(LPCTSTR String);String是一个包括四部分的字符串:的一部分为波特率;第二部分为奇偶校验,N表示不校验,E表示偶校验,O表示奇校验,S表示空格校验,M表示符号校验;  第三部分为数据长度,其可选值为4,5,6,7,8;第四部分为停止位长度,其可选为1,1.5,2。 Settings属性的缺省值为“9600,N,8,1”。
   在程序中,我用的是组件框来显示波特率,校验,数据长度,停止位,但是在运行时却老是提示数据值出错,在我的程序中,nBaudRate是用的 int,nParity用的是CString类型,nByteSize,nStopBits也是用的int类型,问题出在了SetSetting("nBaudRate,nParity,nByteSize,nStopBits"),(因为在程序中波特率,校验,数据长度,停止位要求可以选择),请各位高手指点,在SetSetting()中该任何设置这些参数!!!! 程序中格式如下:
         short nComPort=1;
int nBaudRate=9600;
int nByteSize=8;
int nStopBits=1;
CString nParity= "n";
int nIndex,nCount;
CString szText("");
      
         //波特率
nIndex = m_comboBaudRate.GetCurSel();
nCount = m_comboBaudRate.GetCount();

if((nIndex != LB_ERR) && (nCount > 1))
{
m_comboBaudRate.GetLBText(nIndex, szText); if(!szText.IsEmpty())
{
nBaudRate = ::atoi(szText);
}
else
{
nBaudRate = 9600;
}
}

        if(m_ctrlComm.GetPortOpen())
       m_ctrlComm.SetPortOpen(FALSE);

      m_ctrlComm.SetCommPort(nComPort); 
      if( !m_ctrlComm.GetPortOpen())
      m_ctrlComm.SetPortOpen(TRUE);
          else
          AfxMessageBox("cannot open serial port");
     
     m_ctrlComm.SetSettings("nBaudRate,nParity,nByteSize,nStopBits"); *************
 m_ctrlComm.SetInputMode(1);
     m_ctrlComm.SetRThreshold(1); 
     
     m_ctrlComm.SetInputLen(0); 
     m_ctrlComm.GetInput();

解决方案 »

  1.   

    gz我也是用mscomm控件,但是我是固定设置,没想过
      

  2.   

    我的程序编译时没错误,在执行文件中当我点击设置参数的那个按纽是弹出 Invalid property value的消息框
      

  3.   

    我想应该是这里有问题:SetSetting("nBaudRate,nParity,nByteSize,nStopBits")
         
       我展开你的SetSetting里的东西就是:" "...","...","...","..." "
      而实际上要的应该是" ... , ... , ... , ... "我看是不是把nBaudRate,nParity,nByteSize,nStopBits这四个 + 在一起,然后转换为LPCTSTR
      

  4.   

    我的意思就是把nBaudRate + nParity + nByteSize + nStopBits在一起后转换为LPCTSTR,
    直接作为SetSetting的参数你试试
      

  5.   

    CString str;
    str.Format("%d,%s,%d,%d",nBaudRate,nParity,nByteSize,nStopBits);
    SetSetting(str);