用MFC编写的通信程序,,打开串口时报"Port already open"的错误!!急求大神的解答!! 10

在VC中用MSCOMM控件读窗口数据,在一格对话框中建立一个MSCOMM控件,然后在对话框的onInitDialog函数中对它进行如下初始化BOOLCComutiDlg:... 在VC中用MSCOMM控件读窗口数据,在一格对话框中建立一个MSCOMM控件,然后在
对话框的onInitDialog函数中对它进行如下初始化
BOOL CComutiDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if(m_ComPort.GetPortOpen())
{
m_ComPort.SetPortOpen(FALSE);
}
m_ComPort.SetCommPort(1); //选择1号串口
m_ComPort.SetInBufferSize(1024); //接收缓冲区
m_ComPort.SetOutBufferSize(1024);//发送缓冲区

m_ComPort.SetInputMode(1); //以二进制方式输入
m_ComPort.SetSettings("9600,n,8,1"); //设置波特率等参数
//设置为1表示当串口接受缓冲区中有多于或等于1个字符时
//将引发一个关于comExReceive的事件
m_ComPort.SetRThreshold(1);
if(!m_ComPort.GetPortOpen())//如果串口没有打开则打开
m_ComPort.SetPortOpen(TRUE);//打开串口
else
m_ComPort.SetOutBufferCount(0);
m_ComPort.GetInput(); //预读缓冲区以清除残留数据
return TRUE; // return TRUE unless you set the focus to a
}
在函数的第二到第五行,我已经明确写到如果端口是打开的,则关闭端口,可是
调试时m_ComPort.GetPortOpen()返回FALSE,在后面打开串口时就会报"Port already open"的错误!!
我这个程序是用在MAXA无线通信上的,我觉的是MAXA一上电就接收到了数据了,可能是缓冲区那里有值。不知道对不对,求大神帮忙解决。。。。谢谢啦!!
展开
 我来答
linux驱动开发
2014-12-22 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:77
采纳率:0%
帮助的人:34.2万
展开全部
你在后面调用m_ComPort.SetPortOpen(TRUE);//打开串口

之前应该调用m_MSComm.SetCommPort(1); //选择COM1
追问
有的,,,我发想一个问题,,就是我在电脑设备管理器那里的串行枚举器的选框去掉之后,问题就解决了,但是出现了新的问题,就是有时我写的程序识别不了串口,还有用串口调试助手也打开,也提示无串口。这是什么情况呢??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
上宫萧痕
2017-07-05
知道答主
回答量:1
采纳率:0%
帮助的人:976
展开全部
楼主是怎么解决的,急求啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
查晓筠0i5
2014-12-20 · TA获得超过2752个赞
知道大有可为答主
回答量:2.1万
采纳率:1%
帮助的人:4951万
展开全部
需要帮你完成吗
更多追问追答
追问
只想知道原因,串口程序我会写,打开串口时,会出现"Port already open"的错误!!,,帮我解决一些这个就行了,
追答
好的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式