Fonction dans dll qui fait planter programme

Signaler
Messages postés
27
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
1 mars 2010
-
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
-
Bonjour,

je travail actuellement sur un code C++, sous dev c++. j'utilise une dll au travers d'un *.lib et dans mon programme principal je fais appel a des fonctions de ma dll.

Mon programme compile, me cree mon *.exe, cependant quand mon prgm arrive a une ligne de code ou je fais appel a une fonction presente dans la dll!, il plante et me met le message d'erreur windows :

"emulateur_AOA.exe a renconté un probleme et doit fermer, vous pouvez envoyer le rapport d'erreur a Microsoft ... "

Je n'arrive vraiment pas a comprendre ce qui se passe :!!

Si quelqu'un a une idée?

Merci d'avance

10 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Ta DLL est probablement buggée ...
Recopie les fonctions une par une dans un EXE et teste-les en Debug.
Tu verras la/les lignes où ça pose problème.
Messages postés
27
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
1 mars 2010

Du coup j'ai abandonner ces librairies et je vais chercher dynamiquement mes fonctions de ma dll avec les routines :

HINSTANCE load_lib = LoadLibrary("synchro.dll" ); ...


La maintenant ca marche super bien ,
enfin je croyais, je dois appeler la meme fonction plusieur fois, et la
desque je l'appel plus de 10 fois, mon prgm se coupe et ca me met
"monprgm.exe a rencontré un probleme et doit se fermer, vous pouver
envoyer le rapport d'erreur a Microsoft ..."


Je ne sais pas pourquoi, mais j'ai fait plusieurs test, je ne sais pas
si c'est une coincidence ou pas, mais si je l'appel 9 fois ca marche,
10 fois ca marche, mais des que j'essaye de l'appeler 11 fois ca beug !  
Messages postés
27
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
1 mars 2010

(Je peut ajouter que ma dll contient des fonctions pour ecrire sur une
carte relié sur le port PCI de mon ordi, peut etre que ca a un rapport
avec mon beug )
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Aucune idée du pourquoi, pose la question aux développeurs de la lib.
Je ne pense pas que quelqu'un puisse t'aider ici.
Messages postés
27
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
1 mars 2010

Je voudrais juste te montrer comment je fais appel a ma fonction dynamiquement, pour voir si le probleme viens peut etre de la :


ma fonction en question est (comme elle est déclaré dans le .h qui va avec la dll) : void WINAPI Program_Angle(int Card, int Channel, WORD Angle)


je peut vous montrer comment je fait pour appeler cette fonction :

// Déclarer un type de la fonction

typedef void (PROGRAM_ANGLE) (int, int, WORD);
// Déclarer les fonctions de la DLL

PROGRAM_ANGLE *Program_Angle;
// Récupérer l'adresse des fonctions en DLL

Program_Angle = (PROGRAM_ANGLE *) GetProcAddress(load_lib, "Program_Angle" );


//appel de ma fonction dans le programme

(*Program_Angle)(Card,(Channel-1),buffer[j]);

Peut etre je m'y prend mal pour appeler ma fonction??
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut
Si tu as accès au code de ta dll, alors poste le code de la fonction qui fait planté ton programme.
Sinon, contacter les personnes qui ont écrit cette lib est effectivement une bonne idée.
Tu peux aussi regarder dans la documentation de cette fonction pour savoir s'il y a certaine restriction.
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
27
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
1 mars 2010

Malheureusement je n'ais pas acces au code de dll. J'ai essayer de contacter l'entreprise qui fornit cette dll, mais le gars qui s'occupe de soft est comme par hasard en vacance :( !!

Le probleme ne doit pas venir de leur dll de toute facon, car j'ai un .exe qui a été réaliser avec cette dll et qui tourne. Puis mon beug quand j'appel ma fonction le fait pour n'importe quel fonction de la dll.

Pense tu que la facon dont je m'y prend pour appeler ma fonction dynamiquement est bonne?

(Je viens aussi de m'apercevoir quand je fais du pas a pas en debug, je plante bien sur ma ligne d'appel de ma fonction et windows me met l'erreur "une violation d'acces (erreur de segmentation) est apparue dans votre programme" )
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
C'est du STDCALL ? T'as le bon nombre de paramètres ?
Messages postés
27
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
1 mars 2010

C'est bon probleme résolu, il fallai mettre le terme "WINAPI" lors de ma déclaration de fonction.

Merci pour votre aide!
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Si ton problème est résolu, il faut cocher la case réponse accepté pour que les autres personnes de qui répondent aux questions ne perdent pas de temps à lire un post résolu.
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr