Bonjour à tous,

Je dois communiquer avec une dll afin de récupérer des informations.

Dans cette dll, il y a une fonction ReceiveMsg, avec tout plein de paramètres de types différents (pas mal de pointeurs) et je n'arrive pas à l'appeler correctement.

Voici le prototype de la fonction de la DLL pour un appel en C :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
int receiveMsg (char * buffer, int length, int * actualLength, char * eomChar, char * c1c2, long timeout)
Cette fonction permet de récupérer une chaine dans buffer.
-length est la taille de ce buffer
-actualLength est un pointeur sur en entier, dans lequel doit être écrit la taille du message écrit dans buffer après excution de la fonction.
-eomChar et et c1c2 sont 2 pointeurs sur des caractères (ce ne sont pas des chaines, ils contiennent tous 2 1 seul char)

J'appelle cette fonction de la manière suivante sous Windev :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
nRes est un entier
 
sfBufferLoc est une chaîne fixe sur 255
nAdr est un entier = &sfBufferLoc
nEomcharLoc est un entier sur 1 octet
nC1c2Loc est un entier sur 1 octet
nActualLengthLoc est un entier
nLengthLoc est un entier = 255
nTimeOutLoc est un entier = 50
 
 
nRes = API(gsDll, "receiveMsg", &sfBufferLoc, nLengthLoc, &nActualLengthLoc, &nEomcharLoc, &nC1c2Loc, nTimeOutLoc)
Je me suis référé à la page d'aide de Windev sur la conversion des types en C pour créer l'appel, mais ça ne fonctionne pas, à chaque fois j'ai "Une erreur système inattendue est survenue", et ça m'énerve ^^

Voici le message d'exception complet :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
Erreur à la ligne 30 du traitement Procédure globale ReceiveMsg.
Une erreur système inattendue est survenue.
Si cet incident se produit de manière systématique lorsque vous exécutez les mêmes manipulations, il est conseillé de transmettre au Support Technique Gratuit :
 - une description des circonstances de l'incident
 - les lignes de code, une fenêtre ou un projet permettant de reproduire le problème
 - les informations techniques suivantes
 
Détails techniques :
 
Module : WD110VM.DLL
Version du module : 11.00Qd
VI : 01F110054b
Adresse de base : 25E60000
Erreur système : Access violation (GPF)
EIP = 25E6606D
OS : Windows Longhorn (6.0.6000)
 
Informations techniques
 
Projet : Composant API
 
Dump de l'erreur du module <WD110VM.DLL> <11.00Qd>.
 
- Appel WL :
Traitement de <TASharing.ReceiveMsg>, ligne <30>, thread <0>
 
- Niveau : erreur fatale (EL_FATAL)
 
- Code erreur : 1020
 
- Code erreur WD55 : 0
 
- Pas de code d'erreur système
 
- Pas de message d'erreur système
 
- Que s'est-il passé ?
Une erreur système inattendue est survenue.
Si cet incident se produit de manière systématique lorsque vous exécutez les mêmes manipulations, il est conseillé de transmettre au Support Technique Gratuit :
 - une description des circonstances de l'incident
 - les lignes de code, une fenêtre ou un projet permettant de reproduire le problème
 - les informations techniques suivantes
 
Détails techniques :
 
Module : WD110VM.DLL
Version du module : 11.00Qd
VI : 01F110054b
Adresse de base : 25E60000
Erreur système : Access violation (GPF)
EIP = 25E6606D
OS : Windows Longhorn (6.0.6000)
 
- Infos de debug :
Registres :
 
  EIP = 25E6606D    EBP = 0012F444
  EAX = 003D00F0    EBX = 01352D88
  ECX = 57203041    EDX = 00000006
  ESI = 01312D10    EDI = 01312D10
 
Pile des appels :
 
[WD110VM.DLL (25E60000), 11.00Qd, 01F110054b]	25E6606D
[WD110VM.DLL (25E60000), 11.00Qd, 01F110054b]	25E74D90 : WL_SetParam() + 88731 bytes-> INVALID, stack increased by 4
[???]	01312D10
[WDTST.EXE (00000000), 11.00Al, 01F110053p]	74C08525
Pile invalide
 
 
- Infos attachées :
EIT_DATEHEURE : 12/02/2008 13:07:39
EIT_PILEWL :
Procédure globale ReceiveMsg (TASharing.ReceiveMsg), ligne 30
Clic sur BTN_receiveMsg (Fen_TestAPI.BTN_receiveMsg), ligne 10
 
- Identifiant dans le .err : 1020
Voilà, je suis vraiment bloqué à cause de ça, si vous avez une info, hésitez pas à répondre

Merci d'avance !