2017-08-18 9 views
0

私は接続し、WindowsスマートカードAPIを介してスマートカードにコマンドを送信しようとしています。以下はMSDNのコードです。ここではSCardTransmit関数は常に私に0x000005aaを返す、私は間違って何をしているかを私に知らせることができます。SCardTransmitがエラー0x000005aaを返します

int _tmain(int argc, _TCHAR* argv[]) 
{ 
SCARDCONTEXT hContext; 
LONG   lReturn; 
SCARDHANDLE  hCardHandle; 
DWORD   dwAP; 
const DWORD BUF_LEN = 512; 
DWORD dwRecv; 
BYTE pbRecv[BUF_LEN]; 

BYTE sendCommand[]={0x00,0x0A4,0x00,0x00,0x02,0x3F,0x00}; 

lReturn = SCardEstablishContext(SCARD_SCOPE_USER, NULL,NULL,&hContext); 
if (SCARD_S_SUCCESS != lReturn) 
{ 
    printf("Failed SCardEstablishContext\n"); 
    SCardReleaseContext(hContext); 
    return 0; 
} 

lReturn = SCardConnect(hContext, "OMNIKEY CardMan 3x21 0", 
    SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, 
    &hCardHandle, &dwAP); 
if (SCARD_S_SUCCESS != lReturn) 
{ 
    printf("Failed SCardConnect\n"); 
    SCardReleaseContext(hContext); 
    return 0; 
} 

switch (dwAP) 
{ 
case SCARD_PROTOCOL_T0: 
    printf("Active protocol T0\n"); 
    break; 

case SCARD_PROTOCOL_T1: 
    printf("Active protocol T1\n"); 
    break; 

case SCARD_PROTOCOL_UNDEFINED: 
default: 
    printf("Active protocol unnegotiated or unknown\n"); 
    break; 
} 

lReturn = SCardTransmit(hCardHandle,SCARD_PCI_T0,sendCommand,7, 
    NULL,pbRecv,&dwRecv); 
if (SCARD_S_SUCCESS != lReturn) 
{ 
    printf("Failed SCardTransmit\n"); 
} 
lReturn = SCardReleaseContext(hContext); 
return 0; 
} 
+0

最後の関数は 'SCardReleaseContext'です、それはあなたが意味するものですか?おそらく、最後のものを見つける必要があるのではなく、ちょうどそれに名前を付けることができます。 'dwRecv'は初期化されていないように見えますが、適切な値を持つはずです。応答のために –

+0

ありがとうございます。私が試してみましょう。 – vivek

+0

それが働いて、私は答えとしてそれを入れます。ありがとう。 – vivek

答えて

0

Retired Ninjaのコメントで示唆されています。プログラムが動作する変数を初期化した後、変数dwRecvを初期化する必要があります。ありがとう。

関連する問題