Fonction dans dll qui fait planter programme

pitch069 Messages postés 27 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 1 mars 2010 - 24 avril 2009 à 14:09
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 - 29 avril 2009 à 09:50
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

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 avril 2009 à 19:14
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.
0
pitch069 Messages postés 27 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 1 mars 2010
27 avril 2009 à 16:53
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 !  
0
pitch069 Messages postés 27 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 1 mars 2010
27 avril 2009 à 16:57
(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 )
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
27 avril 2009 à 19:18
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pitch069 Messages postés 27 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 1 mars 2010
28 avril 2009 à 09:15
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??
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
28 avril 2009 à 10:08
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
0
pitch069 Messages postés 27 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 1 mars 2010
28 avril 2009 à 10:30
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" )
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 avril 2009 à 18:54
C'est du STDCALL ? T'as le bon nombre de paramètres ?
0
pitch069 Messages postés 27 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 1 mars 2010
29 avril 2009 à 09:01
C'est bon probleme résolu, il fallai mettre le terme "WINAPI" lors de ma déclaration de fonction.

Merci pour votre aide!
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
29 avril 2009 à 09:50
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
0
Rejoignez-nous