首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

向,串口调用Writefile 是否只能发送字符的ASIIC,怎么能够发送超出ASIIC定义的16进制,

2012-12-30 
向各位大哥求救,串口调用Writefile 是否只能发送字符的ASIIC,如何能够发送超出ASIIC定义的16进制,急!!各位

向各位大哥求救,串口调用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这个参数改成字节数组或整形数组。

热点排行