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 :

Probleme de chargement de dll


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Probleme de chargement de dll
    Bonjour,

    Voici mon code :

    Ajout de cette ligne dans mon .pro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEFINES += MYSHAREDLIB_LIBRARY
    header permettant d'utiliser le nouveau .pro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef LIBRARY_H
    #define LIBRARY_H
     
    #include <QtCore/QtGlobal>
    #if defined(MYSHAREDLIB_LIBRARY)
    #    define MYSHAREDLIB_EXPORT Q_DECL_EXPORT
    #else
    #    define MYSHAREDLIB_EXPORT Q_DECL_IMPORT
    #endif
     
    #endif //LIBRARY_H
    fenêtre windows permettant le test de l'ouverture d'une dll :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include "../include/Spider.h"
     
    Spider::Spider()
    {
                QDialog * test = new QDialog;
                HINSTANCE hlib = LoadLibrary(L"c:\\projetsQT\\essaiDvlp\\debug\\Spider32");
                if (hlib == NULL) QMessageBox::critical(test,"erreur","hlib = NULL");
                else QMessageBox::information(test,"Succes","Succes");
    }
     
    Spider::~Spider()
    {
                //dtor
    }
    hearder de la fenêtre test :
    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
    #ifndef SPIDER_H
    #define SPIDER_H
     
    #include <QtGui>
    #include <QtCore>
    #include <iostream>
    #include "windows.h"
    #include "dllFilGlobal.h"
     
    using namespace std;
     
    class Spider
    {
                public:
                            Spider();
                            virtual ~Spider();
                protected:
                private:
    };
     
    #endif // SPIDER_H

    Je réalise mon code sous l'IDE code::block et je compile avec le command prompt de QT.
    Avec ce code l'instance renvoryée (hlib) vaut toujours NULL, bien que la compilation se fasse sans problème... Et ce qui est d'autant plus étonnant, c'est que sur certaine dll ça ne me le fais pas...

    Quelqu'un aurait-il une idée ???

    Merci d'avance!

    NB : Je tiens à préciser que j'ai déjà réussi a charger la dll "Spider32" en utilisant le compilateur de code::block.

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Juste pour info tu ne charges pas la Dll avec Qt mais avec l'API Win32 de Windows.
    Je pense que tu devrais ecrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HMODULE hlib = LoadLibraryW (L"c:\\projetsQT\\essaiDvlp\\debug\\Spider32.dll");
    Ou sinon faire la meme chose avec Qt en regardant ici.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    merci d'avoir répondu !! mais aucune le code que tu m'as passé et la bout de code avec Qlibrary ne fonctionne pas...
    En plus je me suis rendu compte que j'ai rajouté du code inutile. En effet, comme je ne cherche qu'à lire une dll je n'ai pas besoin de rajouté la ligne dans mon .pro et mon header relatif à cette dernière

    Du coup mon code devient :

    fenêtre test (.cpp) :
    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
    #include "../include/Spider.h"
     
    Spider::Spider() : QWidget()
    {
        /* Premier test */
     
        const WCHAR * dllName1 = L"c:\\projetsQT\\essaiDvlp\\debug\\Spider32.dll";
        HINSTANCE hlib = LoadLibraryW(dllName1);
        if (hlib == NULL) QMessageBox::critical(this,"erreur","hlib = NULL");
        else QMessageBox::information(this,"Succes","Succes");
     
        /* Second test */
     
        typedef long (*openPortParallele)(long,long);
        QLibrary lib("Spider32");
        openPortParallele openPort = (openPortParallele)lib.resolve("S8_OpenPort");
        if (openPort)
        {
                    QMessageBox::information(this,"test","Ouverture du port possible");
        }
        else QMessageBox::critical(this,"test","impossible de charger la fonction openPort()");
     
     
        QLabel * val = new QLabel("ESSAI");
     
        QGridLayout * menu = new QGridLayout;
        menu->addWidget(val,0,0);
     
        this->setLayout(menu);
    }
     
    Spider::~Spider()
    {
        //dtor
    }
    header de la fenetre test (.h) :
    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
    #ifndef SPIDER_H
    #define SPIDER_H
     
    #include <QtGui>
    #include <QtCore>
    #include <iostream>
    #include "windows.h"
     
    using namespace std;
     
    class Spider : public QWidget
    {
                Q_OBJECT
     
                public:
                            Spider();
                            virtual ~Spider();
                protected:
                private:
    };
     
    #endif // SPIDER_H

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par thieu17 Voir le message
    merci d'avoir répondu !! mais aucune le code que tu m'as passé et la bout de code avec Qlibrary ne fonctionne pas...
    QLibrary est fait pour cela. Tu es sur de ne pas avoir un problème de path?
    Ta dll est bien une dll C qui exporte les fonctions dont tu as besoin?

Discussions similaires

  1. [2.x] Probleme de chargement de modules dll
    Par teraDev dans le forum Symfony
    Réponses: 2
    Dernier message: 12/07/2012, 08h01
  2. probleme de chargement des extensions dans une dll
    Par Syl_20 dans le forum OpenGL
    Réponses: 3
    Dernier message: 03/07/2007, 08h37
  3. Probleme de chargement de aria.dll
    Par arioule dans le forum C++
    Réponses: 1
    Dernier message: 07/09/2006, 20h42
  4. chargement de dll xml
    Par chaudier dans le forum MFC
    Réponses: 4
    Dernier message: 05/12/2003, 10h49
  5. [Débutant][JNI]Erreur de chargement de dll
    Par Agifem dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 24/04/2003, 14h36

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