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 :

Appeler une DLL à partir d'un programme Qt


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut Appeler une DLL à partir d'un programme Qt
    Bonjour, ben j'ai commencé à comprendre petit à petit comment doit marcher mon programme que je veux interfacer avec ma DLL.
    J'ai fais un bout de code que j'ai essayé je pense que la DLL est chargé mais je sais pas comment appeler les fonctions se trouvant dans ma DLL et aussi j'ai un "point.h" qui contient les prototypes des fonctions de la DLL je sais pas si je dois m'en servir??


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int maclass::LoadDLL(QString filename)
    {
     
        QLibrary myLib(filename) ;
     
       typedef void (*MyPrototype)();
       MyPrototype myFunction = (MyPrototype) myLib.load() ;//J'appelle toutes les fonctions existant dans ma DLL.
     if (myFunction)
         myFunction();
     qDebug() << "DLL success load" ;
    //Voici la fonction se trouvant dans la DLL et dont je voudrais appleler!
    //RegisterEventCallback( eventCallback_t eventCallbackProc, void* customData = NULL );
     
    }


    Merci d'avance de votre aide.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Utilise qresolve.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut
    Bonjour, j'ai utilisé resolve mais je pense que ma DLL est chargée mais je sais pas comment appeler les fonctions qui s'y trouvent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int DManual2::LoadDLL(QString filename)
    {
     
        QLibrary myLib(filename) ;
     
       typedef void (*MyPrototype)();
       MyPrototype myFunction = (MyPrototype) myLib.load() ;//J'appelle toutes les fonctions existant dans ma DLL.
     if (myFunction)
         myFunction();
     qDebug() << "DLL success load" ;
     
     
    }
    en sortie j'ai DLL success load mais je sais pas vraiment si elle est chargé??
    Voici la fonction que je veux appeler dans mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int RegisterEventCallback( eventCallback_t eventCallbackProc, void* pData )
    {
    	return OK;
    }
    Je sais pas si je dois mettre le prototype de la fonction dans mon code où j'appelle la dll??
    J'ai besoin de votre help please.
    merci d'avance.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035

  5. #5
    Membre expérimenté Avatar de cayou66
    Inscrit en
    Décembre 2008
    Messages
    286
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 286
    Par défaut
    "Qt fournit la classe QLibrary..."

    Il va falloir passer par des fonctions en C avec QLibrary, ou utiliser la macro EXPORT_C, ou un truc du genre.

    Tu peux regarder aussi du côté du QPluginLoader, ce dont je me suis servis, tu récupère une liste de QObject, correspondants aux classes contenues dans ta dll. Maintenant, il faut bien sûr que ta dll contienne des QObject.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut
    Citation Envoyé par cayou66 Voir le message
    "Qt fournit la classe QLibrary..."

    Il va falloir passer par des fonctions en C avec QLibrary, ou utiliser la macro EXPORT_C, ou un truc du genre.

    Tu peux regarder aussi du côté du QPluginLoader, ce dont je me suis servis, tu récupère une liste de QObject, correspondants aux classes contenues dans ta dll. Maintenant, il faut bien sûr que ta dll contienne des QObject.
    Dans ma dll j'ai pas de classe , j'ai uniquement des methodes en c++ comme une fonction qui return OK quand elle est appelée du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RegisterEventCallback( eventCallback_t eventCallbackProc, void* pData )
    {
    	return OK;
    }

    Merci Yan pour le tuto il ma permi de mieux comprendre , voici ce que j'ai fait mais ça me retourne false??
    Et aussi j'ai un ".h " avec ma dll je sais pas si je dois l'inclure par un #include:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int maClas::LoadDLL(QString filename)
    {
     
        QLibrary myLib(filename) ;
     
       typedef void (*MyPrototype)();
       MyPrototype RegisterEventCallback = (MyPrototype) myLib.resolve("RegisterEventCallback") ;//J'appelle toutes les fonctions existant dans ma DLL.
     if (RegisterEventCallback)
         RegisterEventCallback();
     qDebug() << "DLL success load" << "The value of the function is" << RegisterEventCallback;
     
     
    }
    J'ai false en sortie au lieu de OK??Peut etre que ma dll n'est pas chargé??
    I need help!please

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

Discussions similaires

  1. [JNI] Appeler une DLL Fortran à partir de Java
    Par Graffity dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 13/11/2008, 00h07
  2. Réponses: 2
    Dernier message: 13/02/2008, 16h36
  3. Appeler une DLL à partir de MATLAB
    Par swap_nibble dans le forum MATLAB
    Réponses: 0
    Dernier message: 06/02/2008, 12h06
  4. Réponses: 12
    Dernier message: 23/05/2007, 21h40
  5. Appel d'une dll (c++) dans un programme c++
    Par cout dans le forum C++
    Réponses: 2
    Dernier message: 01/06/2006, 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