本人做了一个用API函数通讯的程序,发送函数如下。如果去掉If Len(COMString) > 255 Then...End if之间的几句话,就会出现错误。还有bRead(LenVal) = Asc(Mid$(COMString, LenVal + 1, 1))中Mid$改为Mid也会出现错误,哪位高手给解释一下。注:每次发送数据不会超过20字符
Function WriteCommString(ByVal COMString As String) As Boolean    
On Error GoTo handelwritelpt
    Dim LenVal, SendBytes As Long
    Dim retval As Long
    Dim bRead(255) As Byte
    If Len(COMString) > 255 Then
        retval = WriteCommString(Left$(COMString, 255))
        retval = WriteCommString(Right$(COMString, Len(COMString) - 255))
        Exit Function
    End If
    For LenVal = 0 To Len(COMString) - 1
        bRead(LenVal) = Asc(Mid$(COMString, LenVal + 1, 1))
    Next LenVal
    retval = WriteFile(CommHand, bRead(0), Len(COMString), SendBytes, 0)
    If retval = 0 Then
        retval = GetLastError()
        MsgBox "串口发送数据错误: " & retval
        CloseComm
        WriteCommString = False
        Exit Function
    End If
    WriteCommString = true
    Exit Function
handelwritelpt:
    WriteCommString = False
    CloseComm
    Exit Function
End Function

解决方案 »

  1.   

    如果你真的“每次发送数据不会超过20字符”,那你说的这两种 出错 的原因,恐怕无法解释!
    你说的那个 If块,是限定每次发送字符串长度的(因为它是用固定大小的缓冲区)。
    如果你发送的字符串那么少,那个If语句不会有作用。Mid$( ) 改为 Mid( ) 也“会出错”,同样无法解释。
    用Mid$( )自然要比用 Mid( ) 好。
    即使改成 Mid( ),在 Asc( )函数中, Mid( )的结果也会自动进行类型转换,参数也是合法的,怎么会引起错误!
      

  2.   

    有个需要说明的是,你这个 WriteCommString() 函数,只适合发送 ASCII码 的标准字符串。
    有汉字(或其它 非ASCII码的字符)时, bRead(LenVal) = Asc( .... ) 那儿会出错。