|
Started by gaetan, Dec., 12 2017 12:16 PM - 10 replies |
| |
| | | |
|
| |
Registered member 7 messages |
|
Posted on December, 12 2017 - 12:16 PM |
Bonjour à tous ,
je suis débutant en Windev et je dois travailler avec une DLL,.
je rencontre une difficulté que je n'arrive pas à solutionner, J'arrive à charger ma DLL, exécuter des opérations basiques en passant les fonctions mais je suis incapable de récupérer des données dans un tableau d'une des fonctions .
j’obtiens l'erreur suivante :
erreur à la ligne 38 du traitement Clic sur BTN_SansNom3. Vous avez appelé la fonction Transfert. L'adresse source fournie (0x4A2E5704 sur 8 octets) est invalide.
Voici la structure de la fonction :
Int ID_MF_REQUEST (Int *uid_length, UInt8 *uid)
uid_length : Longueur de l’UID en octets (4 – 7 octets) uid : Tableau qui contiendra l’UID du tag présent dans le champ de l’antenne
Retour 0x00 : Succès, un tag a été identifié 0x11 : Erreur, aucun tag détecté dans le champ de l’antenne
Voici mon début de code :
ptabTabData est un tableau dynamique nAdresseTableau est un entier système nTailleDonnées est un entier système
hInst est un entier hInst = ChargeDLL("IDAPIv2h.dll")
SI hInst = 0 ALORS Erreur(ErreurInfo()) SINON nResultat est un entier = 0 nResultat = AppelDLL32("IDAPIv2h.dll","Connect_HID") nResultat = AppelDLL32("IDAPIv2h.dll","ID_MF_REQUEST",&nTailleDonnées,&nAdresseTableau) ptabTabData = allouer un tableau de nTailleDonnées réels Transfert(&ptabTabData,nAdresseTableau,nTailleDonnées) Trace(TableauInfo(ptabTabData,tiNombreLignes)) AppelDLL32("IDAPIv2h.dll","Disconnect_HID") DéchargeDLL(hInst) FIN
Pouvez vous m'aider?
Merci beaucoup ,
GaëtanMessage modified, December, 12 2017 - 1:08 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 948 messages Popularité : +30 (92 votes) |
|
Posted on December, 12 2017 - 1:20 PM |
Coucou,
&nTailleDonnées doit probablement contenir la dimension de ton tableau
-- In üs we trust - Joyeux noël |
| |
| |
| | | |
|
| | |
| |
Registered member 946 messages Popularité : +102 (110 votes) |
|
Posted on December, 12 2017 - 1:21 PM |
Bonjour si votre fonction est : Int ID_MF_REQUEST (Int *uid_length, UInt8 *uid) alors je testerais avec :
nTailleDonnées est un entier ptabTabData est un tableau de 512 entiers sans signe sur 1 octet nResultat = AppelDLL32("IDAPIv2h.dll","ID_MF_REQUEST",&nTailleDonnées,&ptabTabData) 512 octets pour la donnée doit être suffisant.... |
| |
| |
| | | |
|
| | |
| |
Registered member 946 messages Popularité : +102 (110 votes) |
|
Posted on December, 12 2017 - 1:37 PM |
Vous auriez l'aide de votre API (voir un exemple en C, C++ ou VB) |
| |
| |
| | | |
|
| | |
| |
Registered member 946 messages Popularité : +102 (110 votes) |
|
Posted on December, 12 2017 - 2:05 PM |
Vu ce que j'ai lu sur le net je testerais :
hndDLL, resAPI, uid_length est un entier système DllName, PathOfDll, uid sont des chaînes tab_uid est un tableau de 512 entier sans signe sur 1 octet
PathOfDll = ".........." DllName = ComplèteRep(PathOfDll) + "IDAPIv2h.dll"
IF NOT fFichierExiste(DllName) THEN Erreur(ChaîneConstruit("Le fichier %1 n'existe pas !", DllName)) RETOUR END
hndDLL = ChargeDLL(DllName) IF hndDLL = 0 THEN Erreur(ChaîneConstruit("Le chargement de la dll : %1 à échoué !", DllName), ErreurInfo(errComplet)) RETOUR END
resAPI = API(DllName, "Connect_HID") IF resAPI <> 0x00 THEN Erreur("Erreur d'ouverture de la communication avec le lecteur !") DéchargeDLL(hndDLL) RETOUR END
WHEN EXCEPTION IN resAPI = API(DllName, "ID_MF_REQUEST", &uid_length, &tab_uid) IF resAPI = 0x00 THEN Transfert(&uid, &tab_uid, uid_length) Trace(uid) ELSE IF resAPI = 0x11 THEN Info("Aucun tag détecté dans le champ de l’antenne") ELSE Info(ChaîneConstruit("La fonction ID_MF_REQUEST a renvoyé : %1", resAPI)) END END DO Erreur(ErreurInfo(errComplet)) END
AppelDLL32(DllName, "Disconnect_HID") DéchargeDLL(hndDLL) |
| |
| |
| | | |
|
| | |
| |
Registered member 7 messages |
|
Posted on December, 12 2017 - 2:17 PM |
Bonjour Philippe,
un tout grand merci pour ce bout de code,
malheureusement j'obtiens l'erreur suivante :
Il s'agit de cette ligne de votre code :
Transfert(&uid, &tab_uid, uid_length) |
| |
| |
| | | |
|
| | |
| |
Registered member 7 messages |
|
Posted on December, 12 2017 - 2:20 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 7 messages |
|
Posted on December, 12 2017 - 2:51 PM |
Bizarrement, le code suivant fonctionne mais me retourne mon UID à l'envers :
nTableau est un entiers sur 8 octets nTailleDonnées est un entier sur 8 octets hInst est un entier hInst = ChargeDLL("IDAPIv2h.dll")
SI hInst = 0 ALORS Erreur(ErreurInfo()) SINON nResultat est un entier = 0 nResultat = AppelDLL32("IDAPIv2h.dll","Connect_HID") nResultat = AppelDLL32("IDAPIv2h.dll","ID_MF_REQUEST",&nTailleDonnées,&nTableau) Trace((NumériqueVersChaîne(nTableau,"04X"))) AppelDLL32("IDAPIv2h.dll","Disconnect_HID") DéchargeDLL(hInst) FIN
il me retourne ceci en valeur hexa 814FAF4A2E5704 alors que la bonne valeur est 04572E4AAF4F81 |
| |
| |
| | | |
|
| | |
| |
Registered member 946 messages Popularité : +102 (110 votes) |
|
Posted on December, 12 2017 - 4:06 PM |
essayez votre code avec :
nTableau est un tableau de 7 entiers sans signe sur 1 octet et regardez en mettant un «stop» après nResultat = AppelDLL32("IDAPIv2h.dll","ID_MF_REQUEST",&nTailleDonnées,&nTableau), la valeur de : nTableau |
| |
| |
| | | |
|
| | |
| |
Registered member 946 messages Popularité : +102 (110 votes) |
|
Posted on December, 12 2017 - 4:18 PM |
dans l'exemple VB il y a : Dim tmp_array(10) As Byte // 1 byte = {0x00,...., 0xFF} rst = IDAPIv2.MULTI_ID_MF_REQUEST(mIdReader, uid_len, tmp_array(0)) je testerais avec nTableau est un tableau de 10 entiers sans signe sur 1 octet |
| |
| |
| | | |
|
| | |
| |
Registered member 7 messages |
|
Posted on December, 13 2017 - 10:37 AM |
Bonjour Philippe,
Un tout grand merci pour les conseils et le coup de main ,
voici le code qui fonctionne pour moi :
Procedure ID_MF_REQUEST()
resAPI, Uid_length est un entier système tab_uid est un tableau de 10 entier sans signe sur 1 octet
QUAND EXCEPTIONEXCEPTION DANS resAPI = API("IDAPIv2h.dll", "ID_MF_REQUEST", &Uid_length, &tab_uid) SI resAPI = 0x00 ALORS sUid est une chaîne POUR i= 1 A 7 sUid = sUid + NumériqueVersChaîne(tab_uid[i],"02X") FIN RENVOYER sUid SINON SI resAPI = 0x11 ALORS Info("Aucun tag détecté dans le champ de l’antenne") SINON Info(ChaîneConstruit("La fonction ID_MF_REQUEST a renvoyé : %1", resAPI)) FIN RENVOYER Faux FIN FAIRE Erreur(ErreurInfo(errComplet)) FIN
Je pense qu'il y a un problème avec la DLL elle même car Uid_length doit normalement retourner la longueur de l'uid (entre 4 ou 7 selon la documentation) hors j'obtiens toujours 8... Ce n'est pas gênant pour moi car les tag que j'utilise sont toujours les mêmes, j'ai donc fait une boucle pour obtenir mon UID.
Bonne journée,
Gaëtan |
| |
| |
| | | |
|
| | | | |
| | |
|