我正在尝试实现在尝试使用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);
这是一个非常紧迫的问题。有没有人碰巧知道可能发生的事情?我事先感谢大家的帮助!
答案 0 :(得分: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);