Я использую пространство имен Windows.Devices.SmartCards для связи со смарт-картой. Я нашел читателя, а также карту. Я также могу отправлять команды APDU на карту. Но проблема в том, что после пары ADPU я получаю ответ 0x63 00 вместо 0x90 00. Большую часть времени он прекращает получать команды после второго или третьего APDU, и после этого ответ всегда равен 0x63 00, пока я не вытащу карту и не переподключусь.
Вот мой код для передачи:
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
Пространство имен.
Вы должны поймать исключения, чтобы увидеть, что на самом деле происходит.
Например, попробуйте что-то вроде этого, когда вы получите буфер:
try
{
IBuffer^ responseBuffer = task.get();
}
catch (COMException ^ex)
{
std::cout << "Transmit APDU failed with exception:" + ex->ToString() << std::endl;
}
Других решений пока нет …