| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2134 人关注过本帖
标题:请高手看下,API串口通讯问题?只接收到第一个字符。
只看楼主 加入收藏
bygoodssn
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-7-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
请高手看下,API串口通讯问题?只接收到第一个字符。
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long
》》》》》》》》》》》》》》》


Public Function ReadData(fhdata As String, Optional lngSize As Long = 255, Optional Outtime As Long = 2000, Optional txtRecv As TextBox) As Long
    On Error GoTo Routine_Exit                                   '打开错误陷阱


    If (com_Handle = 0) Then
        ReadData = 0
        Exit Function
    End If


    Dim lngBytesRead As Long
    Dim fReadStat As Long
    Dim lngErrorFlags As Long
    Dim lngStatus As Long
    Dim udtCommStat As COMSTAT

    '读数据
     If ClearCommError(com_Handle, lngErrorFlags, udtCommStat) <= 0 Then
        PurgeComm com_Handle, PURGE_RXABORT Or PURGE_RXCLEAR
    End If
        fhdata = Space$(255)
        
        fReadStat = ReadFile(com_Handle, ByVal fhdata, lngSize, fReadStat, m_OverlappedRead)
        txtRecv.Text = txtRecv.Text & Trim$(fhdata)
        ClearInBuf                                         '清除缓冲区
   
    ReadData = lngBytesRead
   
    Exit Function
Routine_Exit:
    ReadData = 0
End Function
2016-07-19 10:24
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:941
专家分:5244
注 册:2015-8-10
收藏
得分:0 
这个没有玩过,只能帮顶了
2016-07-19 13:00
bygoodssn
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-7-19
收藏
得分:0 
谢谢,这是字节数组与字符数组转换存在问题。
2016-07-19 17:23
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:941
专家分:5244
注 册:2015-8-10
收藏
得分:0 
以下是引用bygoodssn在2016-7-19 17:23:29的发言:

谢谢,这是字节数组与字符数组转换存在问题。

如果解决了,愿意的话给一个相对详细的原因和解决方法。 予人玫瑰,手有余香。 我们鼓励分享经验。
2016-07-20 11:22
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
没用过。感觉这里有问题。
        fhdata = Space$(255)
        fReadStat = ReadFile(com_Handle, ByVal fhdata, lngSize, fReadStat, m_OverlappedRead)

这里是不是定义一个BYTE数组更好一点。

原因是:VB是 Unicode 的,调用 API 时,临时转换为 ANSI 的,调用完成后,再从 ANSI 转回 Unicode。
在转回的过程中,遵守 chr(0) 中止的规则。
你接收的数据中,如果有 chr(0) ,就会导致在这里被截断。


[此贴子已经被作者于2016-7-20 11:35编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2016-07-20 11:32
bygoodssn
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-7-19
收藏
得分:0 
五楼正解。。。
2016-07-21 15:30
快速回复:请高手看下,API串口通讯问题?只接收到第一个字符。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031233 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved