IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

fonction dans dll qui fait planter programme


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut fonction dans dll qui fait planter programme
    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

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Un problème avec les conventions d'appel peut être

    stdcall, cdecl, ...
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Un problème avec les conventions d'appel peut être

    stdcall, cdecl, ...
    De mauvais paramètres passés en argument...

    As-tu essayé en mode debug de voir ce qu'il se passe ?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Un problème avec les conventions d'appel peut être

    stdcall, cdecl, ...
    Je me permets de re-upper la 2eme réponse à ce post
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    Les tests sur la cartes fonctionnent correctement

    Encore merci !!!!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    J'ai lu sur d'autre forum que devc++ n'etais pas comaptible avec les *.lib mais avec des *.a .

    Bizare que ca arrive quand meme a compiler sans me mettre d'erreur !!
    Du coup j'ai essayer avec reimp.exe de WinGW de creer mon *.a a partir de mon .lib, mais je n'y comprend plus rien quand je link mon .a à mon prgm, devc++ me met des erreurs.

    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 !

    (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 )

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    J'ai essayer avec d'autre fonction de ma dll et j'ai le meme probleme apres plusieur appel ca beug. Je doit surement mal m'y prendre pour faire appel a mes fonctions de ma dll.
    Un exemple d'une des fonctions (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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 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]);

    Quand je fais du pas a pas en debug, je plante bien sur ma ligne d'appel de ma fonction "(*Program_Angle)(Card,(Channel-1),buffer[j])" et windows me met l'erreur : une violation d'acces (erreur de segmentation) est apparue dans votre programme

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Quelle est la valeur de Program_Angle ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    Comment ca "quelle est al valeur de Programme_angle" ??

    Programme_angle c'est une fonction qui est implementer dans la dll.

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Et bien quand tu déroules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Program_Angle = (PROGRAM_ANGLE *) GetProcAddress(load_lib, "Program_Angle" );
    Ton débugger te donne quoi comme valeur pour la variable Program_Angle?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/09/2013, 09h40
  2. Exception dans kernel32.dll qui freeze mon programme
    Par Chekov dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 30/03/2009, 13h59
  3. Réponses: 3
    Dernier message: 01/03/2009, 18h09
  4. Réponses: 13
    Dernier message: 02/11/2006, 15h12
  5. Réponses: 12
    Dernier message: 16/03/2004, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo