首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ SmartCard通信

C++ SmartCard通信
EN

Stack Overflow用户
提问于 2018-03-16 14:45:19
回答 1查看 403关注 0票数 0

我使用Windows.Devices.SmartCards命名空间与智能卡进行通信。我找到了读卡器还有卡片。我也可以发送APDU命令到卡。但问题是,经过几个ADPU后,我收到响应0x63 00,而不是0x90 00。大多数情况下,它在第二次或第三次APDU之后停止接收命令,在此之后,响应始终为0x63 00,直到我移除卡并重新连接为止。

这是我发送的代码:

代码语言:javascript
复制
String^ NFC::transmit(Array<unsigned char>^ outgoing)
{
    String^ response = "";
    IBuffer^ out = CryptographicBuffer::CreateFromByteArray(outgoing);
    auto task = create_task(connection->TransmitAsync(out)).then([](IBuffer^ buffer) {
        return buffer;
    });
    IBuffer^ responseBuffer = task.get();
    response = CryptographicBuffer::EncodeToHexString(responseBuffer);
    return response;
}

connection是一个有效的SmartCardConnection^对象。

create_task函数来自concurrency命名空间。

  1. 我在交流中遗漏了什么吗?
  2. 正如我发现的,0x63 00表示泛型错误。你知道更多关于这个的事吗?
  3. 我在这个名称空间中没有发现如何使用协议t=0或t=1。这是重要的还是自动发现的?
EN

回答 1

Stack Overflow用户

发布于 2018-03-16 15:15:29

您需要捕获异常,才能看到实际发生的事情。

例如,当您获得缓冲区时,尝试这样的操作:

代码语言:javascript
复制
    try
    {
        IBuffer^ responseBuffer = task.get();
    }
    catch (COMException ^ex)
    {
        std::cout << "Transmit APDU failed with exception:" + ex->ToString() << std::endl;
    }

参考

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49323475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档