【问题标题】:SCardTrasmit return empty receive byte arraySCardTrasmit 返回空的接收字节数组
【发布时间】:2013-05-21 12:04:59
【问题描述】:

我正在使用 ACS 阅读器和 NFC 标签实现 c# PC/SC。

我对 SCardTransmit 的原型如下:

[DllImport("winscard.dll")]
public static extern int SCardTransmit (Int32 hCard, ref SCARD_IO_REQUEST pioSendRequest, byte[] SendBuff, Int32 SendBuffLen, ref SCARD_IO_REQUEST pioRecvRequest, byte[] RecvBuff, out Int32 RecvBuffLen);

我有以下代码:

        SCard.SCARD_IO_REQUEST ioRequest = new SCard.SCARD_IO_REQUEST();
        ioRequest.dwProtocol = Protocol; // Is going to be T=1
        ioRequest.cbPciLength = 8;

        byte[] cmdBytes = new byte[] { 0xFF, 0xCA, 0x00, 0x00, 0x00 };
        byte[] rcvBytes = new byte[10];
        int rcvLenght = 0;

        retCode = SCard.SCardTransmit(Handle,
            ref ioRequest, cmdBytes, cmdBytes.Length,
            ref ioRequest, rcvBytes, out rcvLenght);

        if (retCode != SCard.SCARD_S_SUCCESS)
            throw new Exception("Failed querying tag UID: " + retCode);

所有(未显示)初始化的东西似乎都工作正常,我可以成功获得标签的 ATR。

现在,运行此代码,我得到一个成功返回代码,我收到一致的接收字节长度值,但对应的字节数组为空(零)。

任何人都可以就此提出建议?

谢谢。

【问题讨论】:

    标签: c# nfc pcsc


    【解决方案1】:

    SCardTransmit 的原型很可能是问题所在。我会写成:

    [DllImport("winscard.dll")]
    public static extern uint SCardTransmit(Int32 hCard, SCARD_IO_REQUEST pioSendPci, [In] byte[] pbSendBuffer, uint cbSendLength, SCARD_IO_REQUEST pioRecvPci, [In, Out] byte[] pbRecvBuffer, ref uint pcbRecvLength);
    

    主要区别在于倒数第二个参数pbRecvBuffer,它是用属性InOut声明的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2016-04-26
      • 2016-06-01
      相关资源
      最近更新 更多