ScardTransmit SCARD_E_INVALID_PARAMETER winscard [Résolu]

cs_aymen87 109 Messages postés samedi 3 novembre 2007Date d'inscription 4 février 2016 Dernière intervention - 27 juil. 2011 à 13:06 - Dernière réponse : cs_aymen87 109 Messages postés samedi 3 novembre 2007Date d'inscription 4 février 2016 Dernière intervention
- 28 juil. 2011 à 12:02
Bonjour

Je suis en train de développer une application c en utilisant Visual Studio 2008 pour écrire sur une smartcard ISO-7816.

Au niveau de la fonction SCardTransmit le code d'erreur de retour est -2146435068 qui veut dire SCARD _INVALID_PARAMETER.

Pourtant je crois passer en paramètre des types cohérents.
Ci dessous est mon code

BYTE commande[] = {0x00,0xb4,0x03,0x00};
LPSCARD_IO_REQUEST pioRecvPci;
DWORD cbSendLength,num_rec;
BYTE buff_rec[10];

[...]

//Établissement du contexte + connexion carte ... on été déjà effectué avec succès
[...]
cbSendLength=sizeof(commande); CardFlag = SCardTransmit(hCardHandle,SCARD_PCI_T0,commande,cbSendLength,pioRecvPci,buff_rec,&num_rec );

J'ai essayer quelque casting mais cela n'a pas marché aussi.

y aurait il quelqu'un qui puisse m'aider ?
Merci beaucoup !
Afficher la suite 

Votre réponse

5 réponses

cs_aymen87 109 Messages postés samedi 3 novembre 2007Date d'inscription 4 février 2016 Dernière intervention - 28 juil. 2011 à 12:02
+3
Utile
Bonjour

Dans mon cas il fallait remplacer pioRecvPci par NULL.

Merci pour votre aide ;)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_aymen87
cs_patatalo 1466 Messages postés vendredi 2 janvier 2004Date d'inscription 14 février 2014 Dernière intervention - 27 juil. 2011 à 14:13
0
Utile
salut,

verifie ce que retourne sizeof(commande).

BYTE commande[4] = {0x00,0xb4,0x03,0x00};

devrait retourner 4.

BYTE commande[]

je ne suis pas sur, c'est peut-être 0 et il faudrait utiliser "length".

@++
Commenter la réponse de cs_patatalo
cs_aymen87 109 Messages postés samedi 3 novembre 2007Date d'inscription 4 février 2016 Dernière intervention - 27 juil. 2011 à 14:36
0
Utile
Salut
sizeof() retourne 4, je n'arrive toujours pas à localiser le problème !
Commenter la réponse de cs_aymen87
cs_patatalo 1466 Messages postés vendredi 2 janvier 2004Date d'inscription 14 février 2014 Dernière intervention - 27 juil. 2011 à 23:06
0
Utile
re,

The cbSendLength parameter must be set to the size of the T=0 header information (CLA, INS, P1, and P2) plus a byte that contains the length of the data to be transferred (n), plus the size of data to be sent. In this example, this is n+5.

c'est ici.

@++
Commenter la réponse de cs_patatalo
cs_patatalo 1466 Messages postés vendredi 2 janvier 2004Date d'inscription 14 février 2014 Dernière intervention - 28 juil. 2011 à 08:38
0
Utile
re,


A priori, il faut bien envoyer une taille = 4 dans ton cas, par contre, num_rec n'est pas initialisé, de même que pioRecvPci alors que tu reclames le remplissage de le structure je crois.

SCARD_IO_REQUEST pioRecvPc;

et transmettre "&pioRecvPci".

@++
Commenter la réponse de cs_patatalo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.