导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

关于CComboBox串口问题

wrhjyx 2010-07-20 10:55:03
我用CSerialPort串口类做通讯程序,我用注册表得到我想要的串口号,例如是COM3。并在CCombobox的下拉列表中显示出来,当我选中COM3后,点打开串口按钮,总是显示:未发现此串口。我把我的按钮程序粘贴在下面,请大家指教指教我这个菜鸟。本人分很少。。。请大家见谅O(∩_∩)O~
void CPropPageReaddate::OnButton1()
{
// TODO: Add your control notification handler code here
int index;
CString str;
index=m_memoCOM.GetCurSel();//得到当前是第几项
if(index==CB_ERR)
{
MessageBox("没有串口被选中");
return;
}
m_memoCOM.GetWindowText(str);

char m_cParity;
DWORD m_dwCommEvents;
m_cParity='N';
m_dwCommEvents = EV_RXFLAG | EV_RXCHAR;
if (m_Port.InitPort(this, index+1, 9600,m_cParity,8,1,m_dwCommEvents,512))
{
m_Port.StartMonitoring();//启动串口监视线程
str.Format("串口%d已经准备好,请发送数据…………",index+1);
char *szout;
szout=str.GetBuffer(str.GetLength());//把str这个字符串转换成char型的数组
m_List1.AddString(szout);//添加一个字符串到列表中
char aa[20]=" ";
sprintf(aa,"串口%d已经打开",index+1);//在按钮上写字儿,打印一个字符串保存在aa中
m_openCOM.SetWindowText(aa);//更新按钮字
}
else
{
str.Format("没有发现此串口%d…………",index+1);
char *szout;
szout=str.GetBuffer(str.GetLength());
MessageBox(szout);
}
}
...全文
131 点赞 收藏 22
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Eleven 2010-07-20
Debug下进入InitPort函数中看看,为什么失败??
回复
逗比汪星人 2010-07-20
你再单步进去,看看这个函数?

if (m_Port.InitPort(this, index+1, 9600,m_cParity,8,1,m_dwCommEvents,512))
回复
wrhjyx 2010-07-20
我在线等啊。。。。。。。。。。
回复
wrhjyx 2010-07-20
请大家帮帮忙啊~~~~(>_<)~~~~ 我分数很少,请大家见谅啊
回复
wrhjyx 2010-07-20
问题解决了,谢谢大家!谢谢LZNJ06的提示!
回复
wrhjyx 2010-07-20
太感谢楼上了。我会继续努力学习的,欢迎批评指教
回复
chengtao999 2010-07-20

if(index==CB_ERR)
{
MessageBox("没有串口被选中");
return;
}



你自动查找串口后,确实没有看到你有操作过CCombox

你确定你自动查找到的Comname和你CCombox选择的Comname是一致的么?

自动查找串口后比较combox中的候选项,然后选中匹配项。
回复
LZNJ06 2010-07-20
m_memoCOM.GetLBText(m_nCom, str);
str = str.Right(1);
m_nCom = atoi(str);


//以 9600 COM 1 打开串口

if (m_SerialPort.InitPort(this, m_nCom,
回复
LZNJ06 2010-07-20
m_Port.InitPort(this, index+1, 9600,m_cParity,8,1,m_dwCommEvents,512)
中的参数值分别为index=1,m_cParity=78'N',m_dwCommEvents=3(但是这个3在信息区显示是红色的),我的com口就是COM3。所以我觉得函数传递应该是对的吧?

你的COM 口是 3 那么 InitPort 第二个参数是 3才对啊,而不是 INDEX +1 等于 2 啊,你说对不?

回复
LZNJ06 2010-07-20
IF 断点,F11 到 InitPort内部你会不?这样进到函数内看看,再不行,你发过来我看看,

回复
wrhjyx 2010-07-20
m_Port.InitPort(this, index+1, 9600,m_cParity,8,1,m_dwCommEvents,512)
中的参数值分别为index=1,m_cParity=78'N',m_dwCommEvents=3(但是这个3在信息区显示是红色的),我的com口就是COM3。所以我觉得函数传递应该是对的吧?
回复
Eleven 2010-07-20
[Quote=引用 5 楼 wrhjyx 的回复:]
引用 4 楼 visualeleven 的回复:
Debug下进入InitPort函数中看看,为什么失败??

我单步执行了,但是根本就没有执行这个函数,就是说if的条件不成立啊。怎么回事呢?请大侠指教啊,我初学者,谢谢谢谢
[/Quote]
F11进入InitPort函数中去看看
回复
wrhjyx 2010-07-20
不好意思,我不懂得东西太多,其实我是很着急的
回复
wrhjyx 2010-07-20
恩,是我想要的值。InitPort里的参数分别为this,1+1,9600,‘N’8,1,3,512。我觉得参数是对的啊
回复
LZNJ06 2010-07-20
看来我急你不急啊。呵呵 设个断点,看看那些参数是不是你要的值啊。。。。。。
回复
wrhjyx 2010-07-20
串口助手是可以打开我要打的串口的,还能传输数据。我还不太清楚怎么看我传递的参数对不对呢。。。。
回复
wrhjyx 2010-07-20
[Quote=引用 9 楼 lznj06 的回复:]
你的程序打不开,找个串口助手看看能不能打开你要打的串口呀,试试看啊,看看你传的参数到底是多少呀。。。
[/Quote]
楼上的不要着急,我初学,所以很多基础知识都不熟练。我正在努力,谢谢O(∩_∩)O~
回复
LZNJ06 2010-07-20
你的程序打不开,找个串口助手看看能不能打开你要打的串口呀,试试看啊,看看你传的参数到底是多少呀。。。
回复
LZNJ06 2010-07-20
这个与你的串口查找函数没有关系 ,先前对,现在不对,可能是你传的参数有关,跟踪到InitPort函数里边进去看看
回复
LZNJ06 2010-07-20
那个类 串口中有 1 到 4 的限制,不知你打开是多少
this 指针对吗?是串口拥有者的CWnd* pWnd
你的串口有没有被其它程序 占用呢 ,有没有这个串口呢
跟踪到InitPort函数里边进去,看看那个地址返回错了呢。

回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……