除了我希望移除非接触式卡“A”并将其替换为非接触式卡“B”之外,我的应用程序在所有方面都正常工作。
一旦存在卡 B,我将运行以下 PCSC 功能:
lResult = PCSC.SCardDisconnect(hCard, SCARD_RESET_CARD)
lResult = PCSC.SCardReleaseContext(hContext)
lMode = SCARD_SHARE_EXCLUSIVE
lProtocol = SCARD_PROTOCOL_T0
lResult = PCSC.SCardEstablishContext(SCARD_SCOPE_USER, 0, 0, hContext)
If lMode = SCARD_SHARE_DIRECT Then
lResult = PCSC.SCardConnect(hContext, ConnReaderName, lMode, 0, hCard, lActiveProtocol)
Else
lResult = PCSC.SCardConnect(hContext, ConnReaderName, lMode, lProtocol, hCard, lActiveProtocol)
End If
尽管此代码断开连接、释放上下文、重新建立上下文并重新连接到卡,但我似乎收到 8010000f 协议不匹配错误。两张牌都是T=0。经过多次测试,我发现真正起作用的唯一方法是在将非接触式卡B引入现场后等待大约10秒无活动,然后读卡器的活动灯再次闪烁,似乎重置卡并允许交易进行像往常一样前进。
为什么会这样?有没有办法让我尽快强制最终重置?
我确实将 ScardDisconnect 和 ScardReleaseContext 命令分开,在非接触式卡 A 仍在现场时执行它们,但没有任何区别。