串口编程问题(Run-time error '8020':Error reading comm device)

时间:2021-10-04 21:30:35
我用的是CMSCOMM控件,每当我发出一个字符给串口时,在接收消息处理过程中就出现这个错误!

VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strTemp;
strTemp.Format("OnCommEvent:%d",m_comm.GetCommEvent());
AddLog(strTemp);
if(m_comm.GetCommEvent()==2)
{
//TRACE("%d,%d",m_comm.GetInputLen(),m_comm.GetInputMode());
if(m_comm.GetInputLen()==0)
{
//return;
}
//??????????????????????????????????????????????
variant_inp=m_comm.GetInput();
//在这里出错!!!!!!!
//??????????????????????????????????????????????

safearray_inp = variant_inp;
............................................(以下略)

37 个解决方案

#1


我看了很多程序包括Microsoft 提供的VCTerm和MSCOMM(VB)的都是这样实现的!!!

#2


??
没有人看???

#3


MSCOMM这种垃圾最好别用了,我现在都还不会用,我都用串口API写,这样技术上就更透明一些,查错也更方便,具体应用中只要你技术过关,用串口API是最合理的

#4


To AthlonxpX86:

多谢关注和提点:)

看来我今天晚上必须改用API了:(

不过我怀疑是我买的那个BAFO生产的USB2IR转接器的驱动有问题。

我在google.com上和gjwtech.com上都搜过了没有找到相关的有用的信息:(
不管怎样我还是想搞清楚这个问题到底是怎么回事:))

#5


我用的是自己写的,要不要?

#6


To zhang_zhibin:

我想这个问题我会说"我想要!",呵呵:)

先谢了

等我今晚还是不能解决这个问题时,我会对你说“给我吧,求你了!”。当然,这对你也是有好处的:一方面,如果你的程序仍然不能解决这个问题时,我会详细告诉你问题是怎么样的和怎样发生的;
另一方面,如果你的程序解决了这个问题,我会告诉你你是怎么解决这个问题的,(事实上,可能我们在做这么一个程序时自己都不知道自己已经避免了这个问题)

所以,如果你愿意的话,我很想要!

#7


不管怎样,只要我解决了这个问题,我都会回来告诉大家我是怎么解决这个问题的,
多谢大家关注:)

#8


做一些简单的程序可以用MSCOMM了!而且还自中断!

用API则要用OVERLAPPERED再加线程,才能做到MSCOMM即时返回的效果!

我觉得大多数据人应该是用下面方式使用
1、发命令取数据:
WriteFile..
Sleep(1000);//没取到时间再长点
ReadFile...



2、查询是否有数据发送上来
while(TRUE)
{
  ReadFile(...);
  Sleep(1);
}

这样用还不如用MSCOMM!

你在m_comm.GetInput();使用前加
int nBufLen =m_comm.GetInBufferCount();
m_comm.SetInputLen(nBufLen);

#9


如果再出错,你再把出错类型贴出来!

#10


错误代码,
不行就用CSerialPort类,http://codeguru.earthweb.com/network/serialport.shtml
挺好用的,我正在做一个dll用到它,比mscomm好用,起码他不用ole容器,研究一下,很好用的

#11


VARIANT variant_inp;
改为:COlevariant variant_inp;试试

#12


ding

#13


这个帖子可能还要几天才能结,因为我这几天没有办法测试fz_zhou的办法。等我试过了,看看能不能解决,如能解决马上结贴。如有其他水友有条件(我想恐怕很难,不然你也碰到这个问题了,嘿嘿:D)也可以将测试结果贴出来。
  对于各位的鼎力相助,我太高兴了,谢谢谢谢!

To fz_zhou(vcfan):
  你的办法似乎很好,很可能可以解决问题,不过今天晚上我没有办法试,明天看看。
  还有,你的思想我很有感触,多谢指点:)
To tshyson:
  我花了一个晚上用CSerialPort改写了程序,程序功能实现了。不过我还是有点想撞牛角尖,想搞清楚MSCOMM为什么会抛出这么个错误。呵呵:)
To WoShiWaHaHa:
  我的第一反应也是把VARIANT换成COleVariant。嘿嘿,也不行:(
To Zhang_Zhibin(阿苯猫):
  不管怎样还是多谢了,我已经有了:D

#14


MSCOMM控件其实也不是一无是处的,我想至少它可能使我们的面试更快“结束”,嘿嘿:)
这里的“结束”包含两层意思:
如果没有撞邪,一个串口收发通信的程序十多分钟就可以做出来;
如果碰到什么的话,呵呵,那就什么都泡汤咯:D

#15


To fz_zhou(vcfan):
  我今天先在http://expert.csdn.net/Expert/topic/1652/1652310.xml?temp=.9866754给你分。D

#16


up

#17


惨 今天还是不能测试 我没有红外的手机 :(

我好想买一个 到底买什么好呢?NOKIA 3530支持MMS(Multimedia Messageing Service)是不是不错啊,嘿嘿,开玩笑:D 我只是想拿它来做测试而已:D

我这一周又是从星期五一直干到星期天晚上十多点,上个星期就是这样的了 我的生命在透支但是我一点感觉都没有:D

但是我还是感觉到了 我的编程水平有多差了 丢开了MSDN就连一个多线程的问题都解决不了
还有就是以前在XXXX公司真的就是混了一年啊 无限感慨:D

嘿嘿 轻松一下 希望没有影响到大家的心情:D
我仍然记得测试这个问题的哦:D

#18


在网上载一个源代码,用mscomm控件的,先测试,能行的话,在其基础上改你的程序,然后就行了,记住给我加分。

#19


哈哈,没有MSDN,我什么都不能做

#20


To litijun(ltj):
 给分对我来说就是一点:不方便, 一个帖子总共才100分 现在只想快点升级 争取早日达到一贴可以给200 呵呵:D

To AthlonxpX86:
 高手应当可以不要MSDN吧,我想,嘿嘿:D

#21


今天不知道老板什么时候来公司(现在还是没有来哦,昨天一天都没有来) 我是用它的手机测的 呵呵;D

#22


Ladies and 堂客们:

让大伙儿久等了 不好意思,直到现在都还没有解决这个问题哦:D

我也不喜欢拖得这么长啊 哎 条件不理想 我想要什么什么就没有啊:[

回顾这两周以来 我编代码的时间还不到一半 大部分时间都搞那个破红外接口去了

我的那个BAFO产的USB2IR接口连接到另一台机器上很正常 但是只要连接到我的机器上一拿手机对准它它就打开并开始通信而且再也不停啦:[

我经常要一顿乱搞 使得那个虚拟串口(必须建立红外连接才会出现)先被一个能够被我关闭的程序打开 然后拔掉USB2IR接口接着又插上 最后关闭那个程序后才能用
嘿嘿 这种问题 我说都说不清楚 :D
这个问题我也搜了好多资料哦 上nokia.com找驱动,上microsoft.com找ServicePack(其中有一个有关IrDA的Fix还有点用,如果没有这个Fix Nokia6210就不能被Win2k检测到)




#23


不知道我还能不能再来写点什么啊?:D

#24


不会吧 我可以连续贴出五条消息?!!!
哈哈哈:D

#25


怎么没有人来看了呢?是不是我在这里捣乱啊:D

#26


我想删除上面几条消息 但是。。。:(

11213036
199577
1649590 
 

斑竹以上权限才有删除回复的权力

#27


惨 新任务又下来了 而且必须在一周内完成 代码量大约有2000行吧

看来这个问题要再拖一周了

我对不住大家啊:D

#28


删除消息是要扣信誉分的,你真的要删?

#29


啊???删除我自己发的消息还要扣啊,那。。。。我就将它留在那儿当垃圾算了啦:(
不是我不想删哦 是我不敢啦 嘿嘿:D

#30


呃!!!!怪了!!!
我怎么涨到两颗星了 怎么涨的啊 我没有干什么啊???
哦 我记得这段时间 我答了很多问题 在这上面逛了很久 但是我的专家分一分也没有涨啊?怪。。。

嘿嘿 不管怎么样 我今天特别开心:D
我要到灌水区去放点分去 答谢各位啊:D

#31


我今天已在灌水区给出300答谢各位 不知道各位收到没有啊?
这个帖子提出的问题 可能还要等一段时间才能解决
对不住了:D

#32


专家分超过100分就长一个三角
1、该版得分小于等于1000分的都算初级用户
                1.1、一级用户 该版得分小于等于100分
                1.2、二级用户 该版得分小于等于500分,大于100分
                1.3、三级用户 该版得分小于等于1000分,大于500分
        2、该版得分大于1000分的算中级用户
                2.1、四级用户 该版得分小于等于2000分,大于1000分
                2.2、五级用户 该版得分小于等于5000分,大于2000分
                2.3、一星用户 该版得分小于等于10000分,大于5000分
                2.4、二星用户 该版得分大于10000分
        3、被授予一定称号的会员算是高级用户
               3.1、三星会员:在技术总榜前10名上榜一周以上 或其他各类专家(网友专栏、MS全球技术支持、  CSDN技术编辑)
               3.2、四星会员:在技术总榜前3名上榜一周以上或者有突出贡献、热心网友
               3.3、五星会员:在技术总榜第一名上榜一周以上或者有突出贡献、热心网友
               3.4、名家专栏
               3.5、csdn管理员   


可以告诉你初学者MSDN可能没多少用处,看也看不栋,但对于高手(VC或者windows开发),他们肯定离不开MSDN,不信你去问masterz,他肯定告诉你没有MSDN他会有多尴尬,

#33


多谢AthlonxpX86(一滴水)

我明白了 我一定努力 好好学习 向你看齐 :D

#34


我一直在看着这个帖子 哎 没有新东西 没有人来看了啊?!
都怪我 半年了都还没有解决一个问题:[

#35


今天我失业了 这个帖子可能要我找到新工作才能结了:(

#1


我看了很多程序包括Microsoft 提供的VCTerm和MSCOMM(VB)的都是这样实现的!!!

#2


??
没有人看???

#3


MSCOMM这种垃圾最好别用了,我现在都还不会用,我都用串口API写,这样技术上就更透明一些,查错也更方便,具体应用中只要你技术过关,用串口API是最合理的

#4


To AthlonxpX86:

多谢关注和提点:)

看来我今天晚上必须改用API了:(

不过我怀疑是我买的那个BAFO生产的USB2IR转接器的驱动有问题。

我在google.com上和gjwtech.com上都搜过了没有找到相关的有用的信息:(
不管怎样我还是想搞清楚这个问题到底是怎么回事:))

#5


我用的是自己写的,要不要?

#6


To zhang_zhibin:

我想这个问题我会说"我想要!",呵呵:)

先谢了

等我今晚还是不能解决这个问题时,我会对你说“给我吧,求你了!”。当然,这对你也是有好处的:一方面,如果你的程序仍然不能解决这个问题时,我会详细告诉你问题是怎么样的和怎样发生的;
另一方面,如果你的程序解决了这个问题,我会告诉你你是怎么解决这个问题的,(事实上,可能我们在做这么一个程序时自己都不知道自己已经避免了这个问题)

所以,如果你愿意的话,我很想要!

#7


不管怎样,只要我解决了这个问题,我都会回来告诉大家我是怎么解决这个问题的,
多谢大家关注:)

#8


做一些简单的程序可以用MSCOMM了!而且还自中断!

用API则要用OVERLAPPERED再加线程,才能做到MSCOMM即时返回的效果!

我觉得大多数据人应该是用下面方式使用
1、发命令取数据:
WriteFile..
Sleep(1000);//没取到时间再长点
ReadFile...



2、查询是否有数据发送上来
while(TRUE)
{
  ReadFile(...);
  Sleep(1);
}

这样用还不如用MSCOMM!

你在m_comm.GetInput();使用前加
int nBufLen =m_comm.GetInBufferCount();
m_comm.SetInputLen(nBufLen);

#9


如果再出错,你再把出错类型贴出来!

#10


错误代码,
不行就用CSerialPort类,http://codeguru.earthweb.com/network/serialport.shtml
挺好用的,我正在做一个dll用到它,比mscomm好用,起码他不用ole容器,研究一下,很好用的

#11


VARIANT variant_inp;
改为:COlevariant variant_inp;试试

#12


ding

#13


这个帖子可能还要几天才能结,因为我这几天没有办法测试fz_zhou的办法。等我试过了,看看能不能解决,如能解决马上结贴。如有其他水友有条件(我想恐怕很难,不然你也碰到这个问题了,嘿嘿:D)也可以将测试结果贴出来。
  对于各位的鼎力相助,我太高兴了,谢谢谢谢!

To fz_zhou(vcfan):
  你的办法似乎很好,很可能可以解决问题,不过今天晚上我没有办法试,明天看看。
  还有,你的思想我很有感触,多谢指点:)
To tshyson:
  我花了一个晚上用CSerialPort改写了程序,程序功能实现了。不过我还是有点想撞牛角尖,想搞清楚MSCOMM为什么会抛出这么个错误。呵呵:)
To WoShiWaHaHa:
  我的第一反应也是把VARIANT换成COleVariant。嘿嘿,也不行:(
To Zhang_Zhibin(阿苯猫):
  不管怎样还是多谢了,我已经有了:D

#14


MSCOMM控件其实也不是一无是处的,我想至少它可能使我们的面试更快“结束”,嘿嘿:)
这里的“结束”包含两层意思:
如果没有撞邪,一个串口收发通信的程序十多分钟就可以做出来;
如果碰到什么的话,呵呵,那就什么都泡汤咯:D

#15


To fz_zhou(vcfan):
  我今天先在http://expert.csdn.net/Expert/topic/1652/1652310.xml?temp=.9866754给你分。D

#16


up

#17


惨 今天还是不能测试 我没有红外的手机 :(

我好想买一个 到底买什么好呢?NOKIA 3530支持MMS(Multimedia Messageing Service)是不是不错啊,嘿嘿,开玩笑:D 我只是想拿它来做测试而已:D

我这一周又是从星期五一直干到星期天晚上十多点,上个星期就是这样的了 我的生命在透支但是我一点感觉都没有:D

但是我还是感觉到了 我的编程水平有多差了 丢开了MSDN就连一个多线程的问题都解决不了
还有就是以前在XXXX公司真的就是混了一年啊 无限感慨:D

嘿嘿 轻松一下 希望没有影响到大家的心情:D
我仍然记得测试这个问题的哦:D

#18


在网上载一个源代码,用mscomm控件的,先测试,能行的话,在其基础上改你的程序,然后就行了,记住给我加分。

#19


哈哈,没有MSDN,我什么都不能做

#20


To litijun(ltj):
 给分对我来说就是一点:不方便, 一个帖子总共才100分 现在只想快点升级 争取早日达到一贴可以给200 呵呵:D

To AthlonxpX86:
 高手应当可以不要MSDN吧,我想,嘿嘿:D

#21


今天不知道老板什么时候来公司(现在还是没有来哦,昨天一天都没有来) 我是用它的手机测的 呵呵;D

#22


Ladies and 堂客们:

让大伙儿久等了 不好意思,直到现在都还没有解决这个问题哦:D

我也不喜欢拖得这么长啊 哎 条件不理想 我想要什么什么就没有啊:[

回顾这两周以来 我编代码的时间还不到一半 大部分时间都搞那个破红外接口去了

我的那个BAFO产的USB2IR接口连接到另一台机器上很正常 但是只要连接到我的机器上一拿手机对准它它就打开并开始通信而且再也不停啦:[

我经常要一顿乱搞 使得那个虚拟串口(必须建立红外连接才会出现)先被一个能够被我关闭的程序打开 然后拔掉USB2IR接口接着又插上 最后关闭那个程序后才能用
嘿嘿 这种问题 我说都说不清楚 :D
这个问题我也搜了好多资料哦 上nokia.com找驱动,上microsoft.com找ServicePack(其中有一个有关IrDA的Fix还有点用,如果没有这个Fix Nokia6210就不能被Win2k检测到)




#23


不知道我还能不能再来写点什么啊?:D

#24


不会吧 我可以连续贴出五条消息?!!!
哈哈哈:D

#25


怎么没有人来看了呢?是不是我在这里捣乱啊:D

#26


我想删除上面几条消息 但是。。。:(

11213036
199577
1649590 
 

斑竹以上权限才有删除回复的权力

#27


惨 新任务又下来了 而且必须在一周内完成 代码量大约有2000行吧

看来这个问题要再拖一周了

我对不住大家啊:D

#28


删除消息是要扣信誉分的,你真的要删?

#29


啊???删除我自己发的消息还要扣啊,那。。。。我就将它留在那儿当垃圾算了啦:(
不是我不想删哦 是我不敢啦 嘿嘿:D

#30


呃!!!!怪了!!!
我怎么涨到两颗星了 怎么涨的啊 我没有干什么啊???
哦 我记得这段时间 我答了很多问题 在这上面逛了很久 但是我的专家分一分也没有涨啊?怪。。。

嘿嘿 不管怎么样 我今天特别开心:D
我要到灌水区去放点分去 答谢各位啊:D

#31


我今天已在灌水区给出300答谢各位 不知道各位收到没有啊?
这个帖子提出的问题 可能还要等一段时间才能解决
对不住了:D

#32


专家分超过100分就长一个三角
1、该版得分小于等于1000分的都算初级用户
                1.1、一级用户 该版得分小于等于100分
                1.2、二级用户 该版得分小于等于500分,大于100分
                1.3、三级用户 该版得分小于等于1000分,大于500分
        2、该版得分大于1000分的算中级用户
                2.1、四级用户 该版得分小于等于2000分,大于1000分
                2.2、五级用户 该版得分小于等于5000分,大于2000分
                2.3、一星用户 该版得分小于等于10000分,大于5000分
                2.4、二星用户 该版得分大于10000分
        3、被授予一定称号的会员算是高级用户
               3.1、三星会员:在技术总榜前10名上榜一周以上 或其他各类专家(网友专栏、MS全球技术支持、  CSDN技术编辑)
               3.2、四星会员:在技术总榜前3名上榜一周以上或者有突出贡献、热心网友
               3.3、五星会员:在技术总榜第一名上榜一周以上或者有突出贡献、热心网友
               3.4、名家专栏
               3.5、csdn管理员   


可以告诉你初学者MSDN可能没多少用处,看也看不栋,但对于高手(VC或者windows开发),他们肯定离不开MSDN,不信你去问masterz,他肯定告诉你没有MSDN他会有多尴尬,

#33


多谢AthlonxpX86(一滴水)

我明白了 我一定努力 好好学习 向你看齐 :D

#34


我一直在看着这个帖子 哎 没有新东西 没有人来看了啊?!
都怪我 半年了都还没有解决一个问题:[

#35


今天我失业了 这个帖子可能要我找到新工作才能结了:(