向各位大哥求救,串口调用Writefile 是否只能发送字符的ASIIC,如何能够发送超出ASIIC定义的16进制,急!!
各位大哥,小弟最近用API函数调试串口,想做一个按输入的16进制字符串输出也是16进制的工具,使用Writefile写串口,但发现只能输入ASIIC范围内的字符串,试验时发现在“00”-“7F”没有问题,但超出7F就输出不正常,发现是受到ASIIC转换的限制,想问Writefile 是否能够向串口写入输出非ASIIC的字符,应该如何调整,附上部分代码请教,谢谢!
Public Declare Function WriteFile Lib "kernel32" _
(ByVal hFile As Long, ByRef lpBuffer As Any, _
ByVal nNumberOfBytesToWrite As Long, _
ByRef lpNumberOfBytesWritten As Long, _
ByRef lpOverlapped As Any) As Long 'OVERLAPPED) As Long
Private Sub cmdSend_Click()
Dim sSend As String
Dim lenBuf As Long '存放将要写入串口的数据长度
Dim NumberWritten As Long '用来记录写入的字节长度
Dim sSendchr As String
Dim sSendchrTEMP As Long
NumberWritten = 0
sSend = Trim$(txtInput.Text) '输入的16进制字符串数
lenBuf = Len(sSend) - 1
sSendchrTEMP = CInt("&H" & sSend) '字符串转换为16进制数
sSendchr = Chr(sSendchrTEMP) '取得ASIIC值
PurgeComm nSendHand, PURGE_RXABORT Or PURGE_RXCLEAR '清空缓冲区
If WriteFile(nSendHand, ByVal sSendchr, lenBuf, NumberWritten, ByVal 0&) <= 0 Then
MsgBox "向串口写数据发生错误!"
End If
Exit Sub
err:
MsgBox err.Description
End Sub
[解决办法]
nSendHand 如何打开的,应该有参数指定数据位数,你现在的数据位数是 7,将它改成 8。
[解决办法]
用 ChrW()
[解决办法]
不用字符串的方式,改用字节数组的方式发送就没这问题。也就是WriteFile中的Byval sSendChr这个参数改成字节数组或整形数组。