本人做了一個用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
uj5u.com熱心網友回復:
如果你真的“每次發送資料不會超過20字符”,那你說的這兩種 出錯 的原因,恐怕無法解釋!你說的那個 If塊,是限定每次發送字串長度的(因為它是用固定大小的緩沖區)。
如果你發送的字串那么少,那個If陳述句不會有作用。
Mid$( ) 改為 Mid( ) 也“會出錯”,同樣無法解釋。
用Mid$( )自然要比用 Mid( ) 好。
即使改成 Mid( ),在 Asc( )函式中, Mid( )的結果也會自動進行型別轉換,引數也是合法的,怎么會引起錯誤!
uj5u.com熱心網友回復:
要是有錯誤,樓主怎么不把具體錯誤提示是什么說一下?還有,如果出錯,你也可以進入除錯狀態,看一下它究竟是如何“出錯”的呀!
uj5u.com熱心網友回復:
有個需要說明的是,你這個 WriteCommString() 函式,只適合發送 ASCII碼 的標準字串。有漢字(或其它 非ASCII碼的字符)時, bRead(LenVal) = Asc( .... ) 那兒會出錯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/142498.html
標籤:VB基礎類
上一篇:VB生成exe檔案后,執行exe檔案程式從串口接收資料不對,高手指教!
下一篇:vb呼叫dll
