本文介绍了SCardTransmit中的错误代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是SCardTransmit函数,但其返回的错误代码为-2146435068
代码为:
Hi,
I m using SCardTransmit function but its returning error code -2146435068
code is:
typedef long (__stdcall *Transmit)(SCARDHANDLE ,LPCSCARD_IO_REQUEST,BYTE,DWORD ,LPSCARD_IO_REQUEST,BYTE,LPDWORD );
BYTE sendCommand[]={0x00,0xA4,0x00,0x00,0x02,0x3F,0x00};
BYTE recvCommand[256];
long result,sendlen=sizeof(sendCommand);
DWORD recvlen;
SCARD_IO_REQUEST pioSendPci;
pioSendPci.dwProtocol=SCARD_PROTOCOL_T0;
pioSendPci.cbPciLength= sizeof(pioSendPci);
result= com(phCard,&pioSendPci,sendCommand[0],sendlen,NULL,recvCommand[0], &recvlen);
if(result!=SCARD_S_SUCCESS){
printf("command not transmitted\n");
}
这里com函数充当SCardTransmit函数。为这些类型的错误提供一些链接,因为无论我在哪里看到错误都是十六进制形式。没有人以这种形式提供错误。
推荐答案
HRESULT gsCard::pfApduSend(char * ARef, const char * AStr)
{
// * Apdu Cmd to send
char * lCmd = (char*)new char[255];
// *
lCmd = gsApdu::gfApduCmd(strlen(AStr), AStr);
// * get "00 C0 00 00 12" pass to (0)(-64)(0)(0)(18) // * <------ pay attention
// *
// * Apdu Cmd Size
unsigned long lLen = sizeof(lCmd) +1; // * <------ pay attention
// *
// * pointer to IO request
SCARD_IO_REQUEST lPio;
lPio.dwProtocol = 0;
lPio.cbPciLength= sizeof(lPio);
// *
// * buffer & size to return by Api
LPBYTE lBuf; // * <------ pay attention
unsigned long lSze = 255;
// *
// * Ask Apdu to Scard
lRet = SCardTransmit(sCardHandle, &lPio, lCmd, lLen, NULL, (LPBYTE)&lBuf, &lSze);
if (lRet == SCARD_S_SUCCESS) {
gsChar::gfCharToAscHex(*ARef, (unsigned char*)(LPBYTE)&lBuf, lSze);
// * get "o\x14‚\x01\x14ƒ\x02 \x10†\x04‡ÿÿ" // * <------ pay attention
// * pass to
// * "6F 14 82 01 14 83 02 20 10 86 04 87 FF FF 00 85 01 00 61 04"
}
}
这篇关于SCardTransmit中的错误代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!