C#调用PCSC即(winscard.dll)中SCardGetStatusChange()怎么使用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#调用PCSC即(winscard.dll)中SCardGetStatusChange()怎么使用?相关的知识,希望对你有一定的参考价值。
想用来判断读卡器是否有卡,但是调用不成功,不能起到阻塞程序的作用.
请大神讲解一下使用的方法,求代码段..
我代用的方法
PCSC.PCSCCSharp.SCARD_READERSTATE restatue=new PCSC.PCSCCSharp.SCARD_READERSTATE();
restatue.RdrName = comboBox2.Text.ToString();
restatue.RdrCurrState = 0x00000000;
result = PCSC.PCSCCSharp.SCardGetStatusChange(pcscContext,100000, ref restatue, 1);
if (result == 0)
但是result的值老是为-2146435063,即SCARD_E_UNKNOWN_READER,pcscContext是没有问题的,可以用来正常连接读卡器的。
private const int SCARD_STATE_UNAWARE = 0x00000000;
// get ATR of card
// hContext - previously established context
// reader - ATR will be read from card in this reader
private static byte[] atr(int hContext, string reader)
int ret;
byte[] atr = null;
SCARD_READERSTATE[] rs = new SCARD_READERSTATE[1];
rs[0].szReader = reader;
rs[0].dwCurrentState = SCARD_STATE_UNAWARE;
ret = SCardGetStatusChange(hContext, 100, rs, 1);
if (ret == 0 && rs[0].cbAtr > 0 && rs[0].rgbAtr != null)
atr = new byte[rs[0].cbAtr];
Array.Copy(rs[0].rgbAtr, atr, rs[0].cbAtr);
return atr;
追问
我也试过将rs设置为readerstatr组了。结果一样的。dwCurrentstate的值我直接赋为0x00000000不行的么?
本回答被提问者和网友采纳以上是关于C#调用PCSC即(winscard.dll)中SCardGetStatusChange()怎么使用?的主要内容,如果未能解决你的问题,请参考以下文章
无法将 SmartCard 与 winscard.dll 连接?
来自 O2Micro 阅读器上的 WINSCARD.DLL 方法 SCardTransmit 的未知响应以及响应长度信息