如果出现传输错误,我会尝试重新连接并重试该操作。但是,当我执行重新连接时,我得到返回值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);这是一件相当紧迫的事情。有没有人碰巧知道可能发生了什么?我要提前感谢大家的帮助!
发布于 2014-01-09 16:53:51
在第一个问题上,我假设您不应该将m_hCard作为引用传递。此外,我将使用从初始连接收到的协议作为首选协议重新连接:
int iRetval = HID.SCardReconnect(m_hCard,
HiDWinscard.SCARD_SHARE_SHARED,
m_protocol,
0, //Leave card alone SCARD_LEAVE_CARD
ref m_protocol);https://stackoverflow.com/questions/21006255
复制相似问题