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

Qt Discussion :

Protéger l'exécution d'un DLL dans Qt


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Par défaut Protéger l'exécution d'un DLL dans Qt
    Bonjour,

    Je développe actuellement une IHM permettant l’exécution de fonctions présentes dans un DLL.

    Dans mon IHM j'importe mes fonctions grâce a QLibrairy et les exécutes les unes après les autres.

    Le problème est que cette DLL présentes de nombreux bug et plante brutalement dans certaines fonctions si la configuration est mauvaise.

    J'aimerais pouvoir détecter les plantages dans DLL et ne pas terminer l’exécution de mon IHM afin de pouvoir notifier à l'utilisateur dans quelle fonction il y a eu un bug.

    Actuellement j'ai une classe qui hérite de QThread qui exécute les fonctions les unes après les autres et envoie un signal pour notifier au reste de l'application quelle fonction s’exécute, et quand une fonctions de la DLL plante toute l'IHM plante.

    Je pensais pouvoir utiliser les try/catch mais aucune exceptions n'est levé durant l’exécution.

    Le fait que mon QThread plante n'est pas un problème, je veux juste que l'IHM rne plante pas.

    J'utilise Qt 4.8.1 pour l'IHM et ma DLL est écrite en C et compiler avec gcc

    Merci de votre aide!

  2. #2
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Par défaut
    Bonjour,

    Si je pars d'un exemple de la doc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QLibrary myLib("mylib");
    typedef void (*MyPrototype)();
    MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
    if (myFunction)
        myFunction();
    Vous dîtes avoir essayé un try catch contenant la dernière ligne (myFunction()) et que cela ne fonctionne pas ? Qu'aucun plantage n'est catché ?

    Bonne continuation,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Par défaut
    Merci pour ta reponse!

    Oui quand je fait ça je ne passe jamais dans le catch.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        QLibrary myLib("mylib");
        typedef void (*MyPrototype)();
        MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
        if (myFunction)
     
        try
        {
            myFunction();
        }
        catch(...)
        {
            // on arrete l'execution des autres fonctions
        }
    Je ne connais jamais le type d'erreur qui se produit dans la DLL, mais en général c'est un débordement de tableau ou un pointeur NULL.

    Je ne peux pas traiter ces erreurs dans la DLL car il y aurait beaucoup trop de modifications.

    Mais si je pouvais passer dans le catch je pourrais stopper mon programme!

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Peut être car les fonctions demandent des données en entrées, que vous ne possédez pas.
    Sinon, on pourrait tenter de mettre signal trap (bon je connais plus le nom) pour capturer la seg fault est l'ignorer.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/05/2014, 13h45
  2. [DLL] Afficher le contenu d'une dll dans un Tpanel
    Par Fabs dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2007, 14h30
  3. Réponses: 9
    Dernier message: 29/03/2005, 09h36
  4. Inclure une dll dans une ressource
    Par bgcode dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/08/2003, 11h12
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52

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