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是没有问题的,可以用来正常连接读卡器的。

参考技术A 不知道你这个是怎么封装的
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 的未知响应以及响应长度信息

在未连接智能卡的情况下发送带有 winscard.dll (PC/SC) 的 APDU

连接金雅拓智能卡时出现错误 6

C# PCSC-sharp 发送/接收带有数据的自定义命令

如何在 Java 中与智能卡交互?