用C#下的HID读卡器使用SCardConnect的返回值为6,求救

yin_helmet 2017-06-28 04:59:48
private void bConnect_Click(object sender, EventArgs e)/*症结所在*/
{
int ReaderNum = -1;
ReaderNum = this.cbReader.SelectedIndex;
switch (ReaderNum)
{
case 0:
if (ICCReader)
retCode = ModWinsCard.SCardDisconnect(hCardICC, ModWinsCard.SCARD_UNPOWER_CARD);
retCode = ModWinsCard.SCardConnect(hContext, cbReader.Text, ModWinsCard.SCARD_SHARE_EXCLUSIVE, ModWinsCard.SCARD_PROTOCOL_T0 | ModWinsCard.SCARD_PROTOCOL_T1, ref hCardICC, ref Protocol);
break;

case 1:
if (PICCReader) /*调试从这个地方进去的*/
retCode = ModWinsCard.SCardDisconnect(hCardPICC, ModWinsCard.SCARD_UNPOWER_CARD);
string s = cbReader.Text;
retCode = ModWinsCard.SCardConnect(hContext, cbReader.Text, ModWinsCard.SCARD_SHARE_EXCLUSIVE, ModWinsCard.SCARD_PROTOCOL_T0 | ModWinsCard.SCARD_PROTOCOL_T1, ref hCardPICC, ref Protocol);
int test = retCode;/*查看的结果,这个retcode的值为6*/
break;

case 2:
if (SAMReader)
retCode = ModWinsCard.SCardDisconnect(hCardSAM, ModWinsCard.SCARD_UNPOWER_CARD);
retCode = ModWinsCard.SCardConnect(hContext, cbReader.Text, ModWinsCard.SCARD_SHARE_EXCLUSIVE, ModWinsCard.SCARD_PROTOCOL_T0 | ModWinsCard.SCARD_PROTOCOL_T1, ref hCardSAM, ref Protocol);
break;

default:
break;
}
if (retCode == ModWinsCard.SCARD_S_SUCCESS)/*所以这个地方总是进不去*/
大牛们,求救
...全文
371 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yin_helmet 2017-06-29
  • 打赏
  • 举报
回复
好的,谢谢了
by_封爱 版主 2017-06-29
  • 打赏
  • 举报
回复
这东西你打110也没用..看文档看文档看文档. 文档看不懂 就打电话咨询厂商售后技术部.... 在csdn上问这种问题 你是得不到答案的
yin_helmet 2017-06-29
  • 打赏
  • 举报
回复
ModWinsCard.SCARD_S_SUCCESS的值为0,应该是参数的问题,现在在尝试调,就觉得这个返回值看起来比较特殊,看有没有特殊的含义。
exception92 2017-06-28
  • 打赏
  • 举报
回复
ModWinsCard.SCARD_S_SUCCESS 这个值是多少 看看说明文档就知道了,既然retCode=6, 不成立,那就应该去调试代码。
最新的PCSC、CCID以及测试源码。 贴一段源码: LONG SCardEstablishContext(DWORD dwScope, /*@unused@*/ LPCVOID pvReserved1, /*@unused@*/ LPCVOID pvReserved2, LPSCARDCONTEXT phContext) { (void)pvReserved1; (void)pvReserved2; if (dwScope != SCARD_SCOPE_USER && dwScope != SCARD_SCOPE_TERMINAL && dwScope != SCARD_SCOPE_SYSTEM && dwScope != SCARD_SCOPE_GLOBAL) { *phContext = 0; return SCARD_E_INVALID_VALUE; } /* * Unique identifier for this server so that it can uniquely be * identified by clients and distinguished from others */ *phContext = (PCSCLITE_SVC_IDENTITY + SYS_RandomInt(1, 65535)); Log2(PCSC_LOG_DEBUG, "Establishing Context: 0x%X", *phContext); return SCARD_S_SUCCESS; } LONG SCardReleaseContext(SCARDCONTEXT hContext) { /* * Nothing to do here RPC layer will handle this */ Log2(PCSC_LOG_DEBUG, "Releasing Context: 0x%X", hContext); return SCARD_S_SUCCESS; } LONG SCardConnect(/*@unused@*/ SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol) { LONG rv; READER_CONTEXT * rContext = NULL; uint32_t readerState; (void)hContext; PROFILE_START *phCard = 0; if ((dwShareMode != SCARD_SHARE_DIRECT) && !(dwPreferredProtocols & SCARD_PROTOCOL_T0) && !(dwPreferredProtocols & SCARD_PROTOCOL_T1) && !(dwPreferredProtocols & SCARD_PROTOCOL_RAW) && !(dwPreferredProtocols & SCARD_PROTOCOL_ANY_OLD)) return SCARD_E_PROTO_MISMATCH; if (dwShareMode != SCARD_SHARE_EXCLUSIVE && dwShareMode != SCARD_SHARE_SHARED && dwShareMode != SCARD_SHARE_DIRECT) return SCARD_E_INVALID_VALUE; Log3(PCSC_LOG_DEBUG, "Attempting Connect to %s using protocol: %d", szReader, dwPreferredProtocols); rv = RFReaderInfo((LPSTR) szReader, &rContext); if (rv != SCARD_S_SUCCESS) { Log2(PCSC_LOG_ERROR, "Reader %s Not Found", szReader); return rv; } /* * Make sure the reader is working properly */ rv = RFCheckReaderStatus(rContext); if (rv != SCARD_S_SUCCESS) re

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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