MSComm串口通信控件如何判断串口被占用或已打开??
常见的代码如下:
if(!m_ctrlComm.GetPortOpen())//判断串口是否已打开,如果没有则打开
{
m_ctrlComm.SetPortOpen(TRUE);//打开串口
}
经过单步调试,发现无论串口是否被打开,程序都会执行到m_ctrlComm.SetPortOpen(TRUE);这句(是不是GetPortOpen函数有问题??),此时如果串口已经被打开或不存在此串口,则该语句自动会弹出错误信息提示框;我是想在程序中加入当串口不存在或已被占用时的代码,我该如何得到串口已被占用或不存在的信息(SetPortOpen函数返回值为void)???是不是在串口操作中也可以想数据库中一样用TRY、CATCH模块来获取串口的错误信息呢,如果是,请说一下具体怎么用??

解决方案 »

  1.   

    好像是有这个问题,没怎么用过这个控件。
    如果用 VC++ 开发程序,到不如直接调用 WIN32 API 函数读写串行口。利用 CreateFile 函数直接就可以判断指定的串行口是否已经打开。
    MSCOMM32 控件和 API 的关系如下:
    【你的应用程序】->【MSCOMM32控件】->【Win32 API 函数】
    从这里可以看出来,最终读写串行口还是要通过 Win32 API 函数;MSCOMM32 控件本来是为了提供给 VB 等调用的,所以,在 VC++ 中倒不如直接调用 Win32 API 函数。下面这篇文章就是讲解这个的:【使用Win32创建串口通讯程序】http://www.vckbase.com/document/viewdoc/?id=1114
      

  2.   


    TRY
    {
       m_cMsComm.SetPortOpen(TRUE);
    }
    CATCH(COleDispatchException, e)
    {
     // 如果串口已经打开,会走到这里来,加上你的判断就可以了……
    }
    END_CATCH
      

  3.   

    我也正在做这个东西:
    抓到异常后,还应该调用 e->Delete(); 不然有内存泄露。 
    另外,后面基于打开串口成功前提下的其他初始化操作就不要走了,不然还会报错的……
      

  4.   

    好像是有这个问题,没怎么用过这个控件。 
    如果用 VC++ 开发程序,到不如直接调用 WIN32 API 函数读写串行口。 利用 CreateFile 函数直接就可以判断指定的串行口是否已经打开。 
    MSCOMM32 控件和 API 的关系如下: 
    【你的应用程序】->【MSCOMM32控件】->【Win32 API 函数】 
    从这里可以看出来,最终读写串行口还是要通过 Win32 API 函数; MSCOMM32 控件本来是为了提供给 VB 等调用的, 所以,在 VC++ 中倒不如直接调用 Win32 API 函数。 
    下面这篇文章就是讲解这个的: 【使用Win32创建串口通讯程序】 http://www.vckbase.com/document/viewdoc/?id=1114
      

  5.   

    不好意思,由于这几天严重感冒,所以几天没有过来,不好意思了……谢谢3楼的回答,正是我需要的,谢谢……以后还是要学习下WIN32 API的直接调用……结题,谢谢各位……