Поделиться через


Метод ISCardCmd::get_ApduReply

[Метод get_ApduReply доступен для использования в операционных системах, указанных в разделе Требования. Он недоступен для использования в Windows Server 2003 с пакетом обновления 1 (SP1) и более поздних версиях, Windows Vista, Windows Server 2008 и последующих версиях операционной системы. Модули смарт-карт предоставляют аналогичные функциональные возможности.]

Метод get_ApduReply получает ОТВЕТ APDU, помещая его в определенный буфер байтов. Ответ может иметь значение NULL , если транзакция не была выполнена с командой APDU.

Синтаксис

HRESULT get_ApduReply(
  [out] LPBYTEBUFFER *ppReplyApdu
);

Параметры

ppReplyApdu [out]

Указатель на буфер байтов (сопоставленный с объектом IStream ), который содержит ответное сообщение APDU при возврате.

Возвращаемое значение

Метод возвращает одно из следующих возможных значений.

Код возврата Описание
S_OK
Operation completed successfully (Операция выполнена успешно).
E_INVALIDARG
Недопустимый параметр ppReplyApdu .
E_POINTER
В ppReplyApdu передан недопустимый указатель.
E_OUTOFMEMORY
Недостаточно памяти.

 

Комментарии

Чтобы определить длину ответа APDU, вызовите get_ApduReplyLength.

Чтобы задать новый APDU ответа, вызовите put_ApduReply.

Список всех методов, предоставляемых этим интерфейсом, см. в разделе ISCardCmd.

Помимо кодов ошибок COM, перечисленных выше, этот интерфейс может возвращать код ошибки смарт-карта, если для выполнения запроса была вызвана функция смарт-карта. Дополнительные сведения см. в разделе Возвращаемые значения смарт-карты.

Примеры

В следующем примере показано, как получить данные ответа. В примере предполагается, что lLe — это переменная типа LONG , значение которой было задано при предыдущем вызове метода ISCardCmd::get_ApduReplyLength , что pIByteReply является допустимым указателем на экземпляр интерфейса IByteBuffer , а pISCardCmd — допустимым указателем на экземпляр интерфейса ISCardCmd .

HRESULT      hr;

if (lLe > 0)
{
    // Get reply data if available.
    hr = pISCardCmd->get_ApduReply(&pIByteReply);
    if (FAILED(hr)) 
    {
        printf("Failed ISCardCmd::get_ApduReply.\n");
        // Take other error handling action as needed.
    }
    else
    {
        BYTE byReplyBytes[256];
        LONG lBytesRead;

        hr = pIByteReply->Read(byReplyBytes, lLe, &lBytesRead);
        if (FAILED(hr))
        {
            printf("Failed IByteBuffer::Read.\n");
            // Take other error handling action as needed.
        }
        // Use the bytes in byReplyBytes as needed.
    }
}

Требования

Требование Значение
Минимальная версия клиента
Windows XP [только классические приложения]
Минимальная версия сервера
Windows Server 2003 [только классические приложения]
Окончание поддержки клиентов
Windows XP
Окончание поддержки сервера
Windows Server 2003
Заголовок
Scarddat.h
Библиотека типов
Scarddat.tlb
DLL
Scardssp.dll
IID
IID_ISCardCmd определяется как D5778AE3-43DE-11D0-9171-00AA00C18068

См. также раздел

get_ApduReplyLength

ISCardCmd

put_ApduReply