MSComm串口通信控件如何判断串口被占用或已打开??
常见的代码如下:
if(!m_ctrlComm.GetPortOpen())//判断串口是否已打开,如果没有则打开
{
m_ctrlComm.SetPortOpen(TRUE);//打开串口
}
经过单步调试,发现无论串口是否被打开,程序都会执行到m_ctrlComm.SetPortOpen(TRUE);这句(是不是GetPortOpen函数有问题??),此时如果串口已经被打开或不存在此串口,则该语句自动会弹出错误信息提示框;我是想在程序中加入当串口不存在或已被占用时的代码,我该如何得到串口已被占用或不存在的信息(SetPortOpen函数返回值为void)???是不是在串口操作中也可以想数据库中一样用TRY、CATCH模块来获取串口的错误信息呢,如果是,请说一下具体怎么用??
常见的代码如下:
if(!m_ctrlComm.GetPortOpen())//判断串口是否已打开,如果没有则打开
{
m_ctrlComm.SetPortOpen(TRUE);//打开串口
}
经过单步调试,发现无论串口是否被打开,程序都会执行到m_ctrlComm.SetPortOpen(TRUE);这句(是不是GetPortOpen函数有问题??),此时如果串口已经被打开或不存在此串口,则该语句自动会弹出错误信息提示框;我是想在程序中加入当串口不存在或已被占用时的代码,我该如何得到串口已被占用或不存在的信息(SetPortOpen函数返回值为void)???是不是在串口操作中也可以想数据库中一样用TRY、CATCH模块来获取串口的错误信息呢,如果是,请说一下具体怎么用??
如果用 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
TRY
{
m_cMsComm.SetPortOpen(TRUE);
}
CATCH(COleDispatchException, e)
{
// 如果串口已经打开,会走到这里来,加上你的判断就可以了……
}
END_CATCH
抓到异常后,还应该调用 e->Delete(); 不然有内存泄露。
另外,后面基于打开串口成功前提下的其他初始化操作就不要走了,不然还会报错的……
如果用 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