SCardTransmit中的错误代码 [英] Error code in SCardTransmit

查看:701
本文介绍了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函数。为这些类型的错误提供一些链接,因为无论我在哪里看到错误都是十六进制形式。没有人以这种形式提供错误。

推荐答案

-2146435068 转换为无符号值(例如unsigned int),这给出了你 2148532228 。将其转换为十六进制,您得到: 0x80100004 。在对 80100004 SCardTransmit 进行了一些谷歌搜索后,结果表明这意味着: SCARD_E_INVALID_PARAMETER 。所以你有它。
Convert -2146435068 into an unsigned value (e.g. unsigned int), this gives you 2148532228. Convert this to hexadecimal and you get: 0x80100004. After a little bit of googling for 80100004 and SCardTransmit it turns out this means: SCARD_E_INVALID_PARAMETER. So there you have it.


多数工作:



Thats work:

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中的错误代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆