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 :

chargement de DLL


Sujet :

Qt

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut chargement de DLL
    Bonjour,

    voici mon problème:

    je dois écrire une dll qui sera utilisée par une application commerciale dont je ne connais pas le code. Je ne connais que la signature des fonctions appelées par cette application. J'ai donc une base comme celle-ci :

    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
     
    /* fichier base.h */
    #include "test_global.h"
     
    #ifdef __cplusplus
    extern "C"
    {                               /* Assume C declarations for C++ */
    #endif   
     
    	TEST_EXPORT int init();
     
    #ifdef __cplusplus
    }
    #endif
     
    /* fichier base.cpp */
    #include "base.h"
    #include "test.h"
    #include <windows.h>
     
    Test * test = new Test();
     
    TEST_EXPORT int init()
    {
            ::MessageBox(NULL, L"init()", L"Info", MB_OK);
    	return test->initialize();
    }
    Test est une classe que j'implémente et qui utilise qt.
    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
     
    #ifndef TEST_H
    #define TEST_H
     
    #include "test_global.h"
     
    class TEST_EXPORT Test
    {
    public:
    	Test(){}
    	~Test(){}
     
    	virtual int initialize();
     
    private:
     
    };
     
    #endif // TEST_H
     
    /* fichier test.cpp */
    #include "test.h"
    #include <QObject>
     
    int Test::initialize()
    {
    	QString toto;
    	return 1;
    }
    Le code est pour l'instant très simple et il compile correctement.
    Mon problème est que lorsque je met ma DLL au niveau du logiciel, il refuse de la charger si la méthode initialize() contient la déclaration QString toto. Si je la supprime, il n'y a aucun problème, et la DLL est chargée.

    Est-ce que quelqu'un pourrait m'aider à résoudre ce problème ?
    merci

  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
    Je n'ai jamais fait ce type de chose car d'après ce que je comprends, tu as d'un coté une application Win32 ou MFC et tu veux qu'elle arrive a exécuter une DLL utilisant Qt. Je ne sais pas si cela peut fonctionner en revanche je suppose qu'il faut que tu mettes dans le répertoire de ton application les DLL Qt (QtCore.dll...) si dans ta DLL tu utilises du code Qt.
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    C'est ça oui.
    J'ai bien pensé à inclure les DLL Qt dans le dossier de ma DLL.

    J'ai l'impression qu'il y a une incompatibilité entre le programme principal (MFC) et les DLL Qt, mais je n'ai rien trouvé pouvant me l'expliquer.
    Compte tenu que l'application appelle des fonctions bien spécifiées, je ne comprend pas pourquoi est-ce que ce qu'il y a autour peut poser problème.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    J'ai trouvé un début de réponse :
    en fait, j'avais placé les DLL Qt dans le même dossier que ma DLL alors qu'il faut les mettre au niveau de l'exécutable. A partir de là, ça fonctionne déjà mieux.
    L'application parvient à lancer ma DLL. Je vais pouvoir continuer à coder, je verrai bien si il reste des bugs ou pas...

  5. #5
    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
    Effectivement bien vu.
    Je suis content de savoir que cela est donc bien possible et que tout cohabite vraiment bien.
    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.

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

Discussions similaires

  1. Erreur de chargement de DLL
    Par marceline dans le forum SAP Crystal Reports
    Réponses: 14
    Dernier message: 17/07/2006, 23h40
  2. Détecter le chargement de DLL "en temps réel"
    Par Playmo dans le forum Windows
    Réponses: 5
    Dernier message: 17/07/2006, 14h13
  3. Erreur de chargement de DLL
    Par marceline dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 12/07/2006, 10h40
  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