VB6做USB接口,遇到很诡异的有关问题,大神进来帮小弟我看看呀
VB6做USB接口,遇到很诡异的问题,大神进来帮我看看呀。
我通过一个定时器,1s的循环去读USB设备上缓存区,然后返回数据。
Private Sub tmrData_Timer() '数据数据收发
Dim i As Integer, j As Integer
SendBuffer(0) = 0 '缓冲区的第一个字节数 Report ID
SendBuffer(1) = &HB4
SendBuffer(2) = 0
SendBuffer(3) = 0
SendBuffer(4) = 0
SendBuffer(5) = DepID
ReadBuffer(2) = 0
Call VBtoUSB
If ReadBuffer(2) <> 0 Then '已接收到数据
Text1.Text = ReadBuffer(2)
ReadBuffer(2) = 0
End If
ReadBuffer(2) = 0
End Sub
现在的问题是:设备上每次被USB上位机读走后都会清除掉缓存区的数据。。。但是VB中的ReadBuffer一直有数据,这是什么原因呀?如果我把VB关掉再重新打开,就读不到了,显然是设备上的缓存区是没有数据的。
然后我用了很多ReadBuffer(2) = 0想去强制把它清空,但是经过Call VBtoUSB 后,ReadBuffer(2) <> 0,感觉相当的诡异,无端端怎么还会保存第一次的数据呢?有什么办法能看到我是哪里没有清除ReadBuffer???
Public Sub WriteReport()
result = WriteFile(HidDevice, SendBuffer(0), 65, 0, 0)
End Sub
Public Sub tmrDelay_Timer()
Timeout = True
SetHosMsg.tmrDelay = False
End Sub
Public Sub ReadReport()
result = ReadFile(HidDevice, ReadBuffer(0), 65, 0, 0)
End Sub
Public Sub VBtoUSB()
Call WriteReport '发送
Timeout = False
SetHosMsg.tmrDelay.Interval = 5
SetHosMsg.tmrDelay.Enabled = True
Do
DoEvents
Loop While Timeout = True
Call ReadReport '接收
End Sub
------最佳解决方案--------------------
我通过一个定时器,1s的循环去读USB设备上缓存区,然后返回数据。
Private Sub tmrData_Timer() '数据数据收发
Dim i As Integer, j As Integer
SendBuffer(0) = 0 '缓冲区的第一个字节数 Report ID
SendBuffer(1) = &HB4
SendBuffer(2) = 0
SendBuffer(3) = 0
SendBuffer(4) = 0
SendBuffer(5) = DepID
ReadBuffer(2) = 0
Call VBtoUSB
If ReadBuffer(2) <> 0 Then '已接收到数据
Text1.Text = ReadBuffer(2)
ReadBuffer(2) = 0
End If
ReadBuffer(2) = 0
End Sub
现在的问题是:设备上每次被USB上位机读走后都会清除掉缓存区的数据。。。但是VB中的ReadBuffer一直有数据,这是什么原因呀?如果我把VB关掉再重新打开,就读不到了,显然是设备上的缓存区是没有数据的。
然后我用了很多ReadBuffer(2) = 0想去强制把它清空,但是经过Call VBtoUSB 后,ReadBuffer(2) <> 0,感觉相当的诡异,无端端怎么还会保存第一次的数据呢?有什么办法能看到我是哪里没有清除ReadBuffer???
Public Sub WriteReport()
result = WriteFile(HidDevice, SendBuffer(0), 65, 0, 0)
End Sub
Public Sub tmrDelay_Timer()
Timeout = True
SetHosMsg.tmrDelay = False
End Sub
Public Sub ReadReport()
result = ReadFile(HidDevice, ReadBuffer(0), 65, 0, 0)
End Sub
Public Sub VBtoUSB()
Call WriteReport '发送
Timeout = False
SetHosMsg.tmrDelay.Interval = 5
SetHosMsg.tmrDelay.Enabled = True
Do
DoEvents
Loop While Timeout = True
Call ReadReport '接收
End Sub
------最佳解决方案--------------------
'Example Name: Using DeviceIoControl
'------------------------------------------
'BAS Module Code
'------------------------------------------
Option Explicit
Public Const DRIVE_REMOVABLE = 2
Public Const DRIVE_CDROM = 5
Public Const INVALID_HANDLE_VALUE As Long = -1&
Public Const GENERIC_READ As Long = &H80000000
Public Const FILE_SHARE_READ As Long = &H1
Public Const FILE_SHARE_WRITE As Long = &H2