一个使用USB读卡器的程序,当程序异常中断时,读卡器的USB接口需要重新插拔一下方可再次使用,可不可以直接在程序中编写代码 代替 重新挺拔USB接口 这一动作

u011011561 2013-06-11 08:52:57
一个使用USB读卡器的程序,在调试程序的过程中,当程序异常中止时,读卡器的USB接口需要重新插拔一下方可再次使用,可不可以直接在程序中编写代码 代替 重新挺拔USB接口 这一动作。

还有,为什么重新插拔一下USB接口就可以用了,在这一动作中,拔出之后操作系统释放了什么,插入之后操作系统又生成了什么?

期望高手们能给予一个清晰有解答。
...全文
259 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2013-06-13
  • 打赏
  • 举报
回复
我的读卡器应用中 Reset 按钮代码。核心是 SCardDisconnect 和 SCardConnectA,相当于向读卡器发送了 PowerOff 和 PowerOn 请求。 有一些控件设置的语句,你可以跳过不看。
Private Sub cmdReset_Click()
Dim RecvLen As Long
Dim lngStatus As Long
Dim n As Integer

cmdDownload.Enabled = False
cmdAddress.Enabled = False
cmdSend.Enabled = False
cmdErase.Enabled = False

If hCntxt Then SCardReleaseContext hCntxt

RetVal = SCardEstablishContext(SCARD_SCOPE_SYSTEM, lngNull, lngNull, hCntxt)
If RetVal Then RetErr

txtRet = ""
txtInf = ""
txtSW1 = ""
txtSW2 = ""
txtInf = ""
Me.Refresh
curReader = Combo1.Text


myReaderState(0).szReader = curReader & vbNullChar
myReaderState(0).dwCurrentState = 0
RecvLen = 1

RetVal = SCardGetStatusChangeA(hCntxt, &HFFFFFFFF, myReaderState(0), RecvLen)
If RetVal Then RetErr: Exit Sub

lngStatus = myReaderState(0).dwEventState
strATR = ""
For i = 0 To myReaderState(0).cbAtr - 1
strATR = strATR & B2H(myReaderState(0).rgbAtr(i))
Next i
SpacePadding strATR, txtInf

If hCard <> 0 Then SCardDisconnect hCard, SCARD_UNPOWER_CARD
RetVal = SCardConnectA(hCntxt, curReader, SCARD_SHARE_EXCLUSIVE, SCARD_PROTOCOL_T0 Or SCARD_PROTOCOL_T1, hCard, Protocol)
If RetVal Then
RetErr
Exit Sub
End If

RetVal = SCardGetStatusChangeA(hCntxt, &HFFFFFFFF, myReaderState(0), RecvLen)
If RetVal Then RetErr: Exit Sub

lngStatus = myReaderState(0).dwEventState
strATR = ""
For i = 0 To myReaderState(0).cbAtr - 1
strATR = strATR & B2H(myReaderState(0).rgbAtr(i))
Next i

If lngStatus And 32 Then
RetState "Reset OK"
cmdDownload.Enabled = True
cmdAddress.Enabled = True
cmdSend.Enabled = True
cmdErase.Enabled = True
cmdExec.Enabled = True
txtCLA.SetFocus
pcb = 0
Else
RetState CardState(lngStatus)
End If
End Sub
u011011561 2013-06-11
  • 打赏
  • 举报
回复
非常感谢,谢谢
worldy 2013-06-11
  • 打赏
  • 举报
回复
看看硬件驱动接口是否提供了Reset之类的借口函数,如果有,按照要求发送一个Reset命令给读卡器 拔了了再插,相当于一次复位操作,使其内部状态恢复到原始值

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧