描述:
在程序中,我用的是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:
CString str;
str.Format("%d,%s,%d,%d",nBaudRate,nParity,nByteSize,nStopBits);
SetSetting(str);
我的意思就是把nBaudRate + nParity + nByteSize + nStopBits在一起后转换为LPCTSTR,
直接作为SetSetting的参数
你试试