我用CMSComm控件来做串行,
今天早上对原有的程序做了点改动,居然弄的出了这个怪问题,郁闷啊
问题情况:
f(!m_mscomm.get_PortOpen())
{
m_mscomm.put_PortOpen(TRUE);
}
上面代码,打开串口成功返回了,没有问题,但是用串口查看器查看了一下,串口目前状态是关闭的。
接下来是关闭串口的代码:
if(m_mscomm.get_PortOpen())
{
m_mscomm.put_PortOpen(FALSE);
}
执行到m_mscomm.get_PortOpen())这句时候又报错了了 郁闷的。
请教高手,在线等

解决方案 »

  1.   

    上面代码,打开串口成功返回了===我怎么看不出你的代码一定就成功返回呢?m_mscomm.put_PortOpen(TRUE);就表示一定成功?执行到m_mscomm.get_PortOpen())这句时候又报错了==报什么错呢?m_mscomm本身有问题吧
      

  2.   

    我打开串口的操作形式是这样的
    try {
    m_mscomm.put__CommPort(m_portNum);
    m_mscomm.put_InBufferSize(256); //设置输入和输出缓存的大小
    m_mscomm.put_OutBufferSize(256);
    if(!m_mscomm.get_PortOpen())
    {
    m_mscomm.put_PortOpen(TRUE);
    m_mscommable = TRUE;
    }
    else
    {
    m_mscommable = FALSE;
    }
    //this->KillTimer(1); //这里为什么要销毁定时器
    //m_mscommable = true;
    }  catch(COleDispatchException *e)
    {
    //m_mscommable = false;
    CString port; if(e->m_dwHelpContext == 8005)
    { port.Format(_T("串口COM%d已被占用"), m_portNum);

    else if(e->m_dwHelpContext == 8002){
    port.Format(_T("串口COM%d不存在"), m_portNum);
    }
    else {
    port.Format(_T("串口COM%d打开时操作不合法"), m_portNum);
    } MessageBox(port, _T("提示"), MB_OK | MB_ICONWARNING );
    return false;
    }
      

  3.   

    没有执行到catch部分,可以认为是成功返回了吗
    至于后面的m_mscomm.get_PortOpen())这个时候则是异常中断了,至于是什么错误,我不知道呢
      

  4.   

    没有进入catch怎么就能说成功呢???只是没有异常而已,并不代表成功啊。
    是否成功,你在put_PortOpen(TRUE)之后,立即调用m_mscomm.get_PortOpen()测试一下。估计也会崩溃吧。
      

  5.   

    我按照你说的 在put_PortOpen(TRUE)之后,立即调用m_mscomm.get_PortOpen(),
    不过没有崩掉,后面的代码还是崩掉了,
    怎么回事呢
      

  6.   

    那m_mscomm.get_PortOpen()的值是TRUE吗?
      

  7.   

    请问我要怎么去得到错误信息呢
    GetLastError()不太熟悉,
    能给点资料,或是网址也可以
      

  8.   

    一般对于未知错误的话我才用try...catch,其他的宁肯用if...else,虽然看起来不是那么显得深奥;
    另外,你这没有错误信息啊,所以应该是进不了catch语句吧?这语句里面的语法似乎是没有错误的,不过打开串口的代码出错,我也不明白