当前位置:编程学习 > VB >>

关于用VB api函数 写串口的问题

我用VB API 写了一个串口的程序,但是怎么都打不开。以下是写的程序。

{前面已有API的相关声明}
com_name = "COM6"
hCF = CreateFile(com_name, &HC0000000, 0, 0, 3, 0, 0)
                                                
 errNum = GetLastError()
编译通过 但是 hCF总是返回-1。

这个COM6是USB的虚拟串口,我也用VB mscomm 控件编过串口程序,也是COM6。在一个机器上,没有任何问题,收发都是正常的。
不知道为什么用API就不行,请各位高手指点一下,谢谢了。 --------------------编程问答-------------------- 看看这个吧,对你有用 --------------------编程问答-------------------- 谢谢你的帮助,你的程序运行后跟我遇到问题是一样的。我选择了com6之后打开,打开串口失败,错误代码0。
而用mscomm控件就是没有问题。 --------------------编程问答-------------------- 刚才我看错了 你的程序可以打开窜口了,但是发送的时候显示 显示写串口失败 错误代码为0 --------------------编程问答-------------------- 是不是压根就没有COM6?
你看看设备管理器中是否有COM6

如果设备管理器中有,那么你可以尝试用串口调试器来打开一下,看看是否成成功打开。如果依然不能,那说明是你这个USB转串口的东西有问题。 --------------------编程问答-------------------- 肯定有的 我用mscomm控件是可以打开的,设备管理器也是有com6.有qq吗 我们在qq里交流一下 --------------------编程问答-------------------- 用MSComm能打开,用API的CreateFile就不能打开?能否成功通信? --------------------编程问答-------------------- LZ的操作系统是? --------------------编程问答--------------------
引用 7 楼 zdingyun 的回复:
LZ的操作系统是?

对!这倒提醒了我,什么操作系统 --------------------编程问答-------------------- 有些 API 在 VB 中是不容易调通的。

我比较习惯用 VC++ 写一个 DLL,让 VB 来调用。
--------------------编程问答-------------------- xp2 中文 操作系统 --------------------编程问答-------------------- 我用mscomm打开和通信都正常,因为我编译后在其他机器上运行需要注册控件。所以我就API希望可以解决这个问题。 --------------------编程问答-------------------- 你的 CreateFile 是如何声明的? --------------------编程问答-------------------- 试试:"\\\\.\\COM6"

另外,关闭其他串口调试软件,因为串口是独占打开的。
--------------------编程问答-------------------- 试一试打开COM1?能否正常打开?

再有,注册控件并不难。如非特殊要求,使用MSComm是不错的选择。
--------------------编程问答-------------------- 当USB串口转换器插到任何一个在计算机上USB口,控制面硬件管理器提示都是COM6,所以COM1是不可能了。我的设备是给别人用的,一般他们都不懂计算机。所以很难让他们设置计算机。另外我按照你的程序格式修改了一下我的程序,串口是可以打开了,但是遇到一个很怪的现象,就是在这个语句(hCF = CreateFile(com_name, &HC0000000, 0, 0, 3, 0, 0))之前必须有个对窗体中某个控件进行一次某个属性赋值的语句,才能打开成功,否则死活都是返回-1,这个真是很怪的。实际我跟你的程序就是差在这个地方,你的程序在这个语句之前有个对一个文本选择框的文本属性赋值的语句,所以就打开就成功,如果删掉就不成功,实际这个语句对打开串口不起任何作用,但是没有就不行,我随便放放一个text1.tex1=text1.text 就能打开成功,如果前面没有它就是不行,太怪了。这个地方我搞了很长时间。
写和读我还没有试,因为你的程序写的时候也是提示错误。今天晚上我在试试。谢谢你了。 --------------------编程问答-------------------- COM1是主板上的原生串口,我让你试验一下能否用代码打开COM1,如果也不能打开那就从软件上查问题。 --------------------编程问答-------------------- 谢谢问题解决啦。 --------------------编程问答-------------------- 串口写的时候,如果返回零,也未必是没有成功。要看出错码 --------------------编程问答-------------------- 我用一个串口自发自收(rs232,2,3 脚短接)我在DB块里设置波特率为800。我发送十个数据。writefile语句后面加了一个延时Sleep(20)之后放一个读语句 readfile。我得到了完整的我发出的的十个数据。很奇怪。按照这个波特率的速度,延时20ms后再接收是不可能得到,完整的十个数据的。是不是我的波特率设置的不对,不是800.还是延时不对。 --------------------编程问答-------------------- 这说明延迟时间不足,你加长延迟时间,通信是需要时间的。哪怕这个时间对人而言感觉不到。 --------------------编程问答-------------------- 谢谢你的回复。我说的是我设置的波特率比较低,仅仅延时20ms,为什么还能收到完整的我发出来的十个数据。是不是我波特率不是800,还是怎么样。我就搞不懂啦。 --------------------编程问答-------------------- 最近正在学,看看 --------------------编程问答-------------------- 一遍通讯都是有一定缓存的,错开时间收发并没有问题。
除非缓冲区满了才会有数据丢失。
你加大数据量试试。 --------------------编程问答-------------------- 推荐使用portmon软件辅助调试串口通讯程序。 --------------------编程问答-------------------- 我也遇到同样的问题,不知楼主现在的情况如何?密切关注!
补充:VB ,  API
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,