0

内容

int SCardTransmit(
        int hCard,
        Pointer<SCARD_IO_REQUEST> pioSendPci,
        Pointer<Uint8> pbSendBuffer,
        int cbSendLength,
        Pointer<SCARD_IO_REQUEST> pioRecvPci,
        Pointer<Uint8> pbRecvBuffer,
        Pointer<Uint32> pcbRecvLength)

我写的代码

  int SCARD_PROTOCOL = 0;
  switch (pdwActiveProtocol.value) {
    case SCARD_PROTOCOL_T0:
      SCARD_PROTOCOL = SCARD_PROTOCOL_T0;
      break;
    case SCARD_PROTOCOL_T1:
      SCARD_PROTOCOL = SCARD_PROTOCOL_T1;
      break;
    default:
      print("Unknown protocol");
      break;
  }

  int hCard = phCard.value;
  List<int> data = [0xff, 0xca, 0x00, 0x00, 0x00];
  Uint8List bytes = Uint8List.fromList(data);
  Pointer<Uint8> pbSendBuffer = bytes.allocatePointer();
  Pointer<Uint8> pbRecvBuffer = calloc<Uint8>();
  int cbSendLength = bytes.length;
  Pointer<Uint32> pcbRecvLength = pbRecvBuffer.cast<Uint32>();

  Pointer<SCARD_IO_REQUEST> pioSendPci = calloc<SCARD_IO_REQUEST>()
    ..ref.cbPciLength = sizeOf<SCARD_IO_REQUEST>()
    ..ref.dwProtocol = SCARD_PROTOCOL;

  ret = SCardTransmit(hCard, pioSendPci, pbSendBuffer, cbSendLength, nullptr,
      pbRecvBuffer, pcbRecvLength);

这很成功,但我无法获得 UID。问题是什么?

我知道有什么遗漏或错误,但我不知道它是什么。

我们使用的是:https://pub.dev/packages/win32

使用的读卡器:RC-380

添加

Uint8List byte = pbRecvBuffer.asTypedList(pcbRecvLength.value);
1:[0, 0, 0, 0, 0, 0, 0, 0, 224, 159]
2:[0, 0, 0, 0, 0, 0, 0, 0, 204, 107]

与第一次和第二次不同。

4

1 回答 1

0
  int sendCommandToCard(int hCard, int SCARD_PROTOCOL, List<int> command) {
    Uint8List bytes = Uint8List.fromList(command);
    Pointer<Uint8> pbSendBuffer = bytes.allocatePointer();
    int cbSendLength = bytes.length;
    const int pbRecvBufferLength = 256; // 缓冲区长度
    Pointer<Uint8> pbRecvBuffer = Uint8List(pbRecvBufferLength).allocatePointer();
    Pointer<Uint32> pcbRecvLength = calloc<Uint32>();
    pcbRecvLength.value = pbRecvBufferLength;

    Pointer<SCARD_IO_REQUEST> pioSendPci = calloc<SCARD_IO_REQUEST>()
      ..ref.cbPciLength = sizeOf<SCARD_IO_REQUEST>()
      ..ref.dwProtocol = SCARD_PROTOCOL;

    int retCode = SCardTransmit(hCard, pioSendPci, pbSendBuffer, cbSendLength, nullptr, pbRecvBuffer, pcbRecvLength);
    if (retCode == SCARD_S_SUCCESS) {
      Uint8List byte = pbRecvBuffer.asTypedList(pcbRecvLength.value);
      debugPrint("SCardTransmit - result:$retCode lenght:${pcbRecvLength.value} byte:$byte");
    }
    return retCode;
  }
于 2021-11-30T17:38:08.737 回答