串口号

场景:CSerialPort种 串口号的限制

CSerialPort类 串口号的限制
请教各位大虾一个问题!
CSerialPort类的源文件中有这么一段
BOOL CSerialPort::InitPort(CWnd* pPortOwner, // the owner (CWnd) of the port (receives message)
   UINT  portnr, // portnumber (1..4)
   UINT  baud, // baudrate
   char  parity, // parity 
   UINT  databits, // databits 
   UINT  stopbits, // stopbits 
   DWORD dwCommEvents, // EV_RXCHAR, EV_CTS etc
   UINT  writebuffersize) // size to the writebuffer
{
assert(portnr > 0 && portnr < 200);
assert(pPortOwner != NULL);
.........................................
}
assert(portnr > 0 && portnr < 200);这条语句是对串口号做了限制吗?
我的电脑获取到实际的串口号是21,
我的程序: if(m_serialport.InitPort(this,21,9600,'N',8,1,EV_RXFLAG|EV_RXCHAR,512))

{
m_serialport.StartMonitoring();
m_bComm[0]=TRUE;  
AfxMessageBox("SUC");
}
else
{
AfxMessageBox("没有发现此串口或被占用!");
m_bComm[0]=FALSE;
}
当我打开21号串口的时候会出错,提示串口号不存在或被占用。即使我屏蔽了以上assert语句,结果还是一样的,请问应该怎么处理呀??
我在程序中需要同时打开10个串口,分别监控10台仪表的串口数据。头疼!
------解决方案--------------------
串口号大于10的话,CreateFile的时候字符串都应该是"\\\.\\com100",而不能是简单的"com1",不知道CSerial类里面做了转换没,时间太长忘记了。不过之前我遇到了这个问题。你试试如果超过10比如说11可以用就不是这个问题,那就可能是串口不存在,被占用等情况。
------解决方案--------------------
引用:
串口号大于10的话,CreateFile的时候字符串都应该是"\\\.\\com100",而不能是简单的"com1",不知道CSerial类里面做了转换没,时间太长忘记了。不过之前我遇到了这个问题。你试试如果超过10比如说11可以用就不是这个问题,那就可能是串口不存在,被占用等情况。
支持
------解决方案--------------------
1.assert(portnr > 0 && portnr < 5);//调整至大于你的串口号
2.sprintf(szPort, "COM%d", portnr);//看看这句你有没有,单步调一下看到这里是不是21
3.在单步调2的时候看看串口返回的句柄值是否有效
------解决方案--------------------
你找找CreateFile的语句。