0

我正在尝试实现代码,当尝试使用 HID 5321 智能卡读卡器读取 TI Tag-IT RFID 卡时,该代码将针对某些错误条件执行 SCardReconnect。如果发生传输错误,我会尝试重新连接并重试操作。但是,当我执行重新连接时,我得到一个返回值 6(无效句柄)。这是调用工作 SCardConnect 和不工作 SCardReconnect 的代码。

int iRetval = HID.SCardConnect(
                    m_hContext,
                    m_sReaderName,
                    HiDWinscard.SCARD_SHARE_SHARED,
                    HiDWinscard.SCARD_PROTOCOL_T1,
                    ref m_hCard,
                    ref m_protocol);

int iRetval = HID.SCardReconnect(ref m_hCard,
                                      HiDWinscard.SCARD_SHARE_SHARED,
                                      HiDWinscard.SCARD_PROTOCOL_T1,
                                      0,  //Leave card alone SCARD_LEAVE_CARD
                                      ref m_protocol);

其中 m_hCard 和 m_protocol 相同(IntPtr)。

以下 SCardTransmit 也可以正常工作,并且它使用对 m_hCard 的相同引用

iRetval = HID.SCardTransmit(m_hCard, ref sioreq, 
                            sendBuffer, sendbufferlen, 
                            ref rioreq, receiveBuffer, 
                            ref receivebufferlen);

这是一件相当紧迫的事情。有没有人碰巧知道可能发生了什么?我提前感谢大家的帮助!

4

1 回答 1

0

在第一个问题上,我假设您不应该将 m_hCard 作为参考传递。此外,我会使用从初始连接接收到的协议作为首选协议重新连接:

int iRetval = HID.SCardReconnect(m_hCard,
                                 HiDWinscard.SCARD_SHARE_SHARED,
                                 m_protocol,
                                 0,  //Leave card alone SCARD_LEAVE_CARD
                                 ref m_protocol);
于 2014-01-09T08:53:51.007 回答