PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → pointeur, chaine et dll externe
pointeur, chaine et dll externe
Débuté par guest, 02 déc. 2005 14:35 - 3 réponses
Posté le 02 décembre 2005 - 14:35
Bonjour a tous,

J'utilise une dll externe dans l'une de mes application que je suis entrain de développer.
L'une des fonctions de cette dll retourne un pointeur sur une chaine de caractère (j'en suis sûr). J'utilise le code suivant afin de tester :

1 hInst est un entier
2 res est un entier
3 ch1 est une chaîne
4 hInst = ChargeDLL("C:\...DllApi.dll")
5 SI hInst = 0 ALORS
6 Erreur(ErreurInfo())
7 SINON
8 API("C:\...Api.dll","mafonction","param1",&res)
9 info(res)
10 API("C:\...Api.dll","mafonction","param1",&ch1)
11 info(ch1)
12 DéchargeDLL(hInst)
13 FIN

Ce code fonctionne sans renvoyer d'erreur jusqu'a la ligne 10 où je suis confronté a une erreur "Violation d'accès à l'adresse 00CDA219 dans le module 'DllApi.dll'. Ecriture de l'adresse 25F20410". Avez vous une idée de comment faire fonctionner ce code ?

Afin de ne pas vous induire en erreur sachez que la Dll a été testée dans une développement avec un autre langage et que le résultat était concluant, par conséquent l'erreur doit provenir de mon code ci-dessus.

Merci pour votre aide.
Posté le 02 décembre 2005 - 10:02
Salut,

ce n'est pas évident de t'aider en ne sachant pas quels sont les parmètres
de tes fonctions.

Je te suggère ceci. Si ton 2e appel à la dll (ligne 10) récupère une chaine
grâce au paramètre ch1, je te conseil plustôt de lui passer l'adresse d'un
entier. Ensuite utilises la fonction ChaîneRécupère avec la valeur de ton
entier.

Si ça ne fonctionne pas il faudrait plus d'information sur cette dll et ces
fonctions.

Mathieu
Posté le 02 décembre 2005 - 18:10
Le type chaîne est dynamique et ne convient pas à l'appel de fonctions de DLL.
il faut utiliser des chaines asciiz d'une taille donnée. La taille doit correspondre aux spécifications de la fonction de la DLL.

A+
Posté le 05 décembre 2005 - 10:51
Merci, je ne connaissais pas la fonction ChaineRecupere, j'ai suivi ta méthode et le résultat est concluant. Je vais donc pouvoir continuer mes tests.

Encore merci, GG