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 :

Liaison d'une DLL


Sujet :

Qt

  1. #1
    Invité
    Invité(e)
    Par défaut Liaison d'une DLL
    Bonjour,

    Voilà, après avoir fait mes marques en Qt, j'aimerais commencer à créer des librairies afin de pouvoir réutiliser facilement mon travail.

    Afin de tester, j'ai créé deux projets différents, le premier est un projet de bibliothèque C++, le second un projet ordinaire destiné à utiliser cette bibliothèque.

    Pour un premier test, la bibliothèque ne contient qu'une classe, avec une fonction :

    Fichier .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class QApplication;
     
    class TOOLSLIBRARYSHARED_EXPORT ToolsLibrary {
    	public:
    		ToolsLibrary(int n, char* v[]);
     
    		int handSign();
     
    	private:
    		QApplication* application;
    };
    Fichier .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
     
    #include "ToolsLibrary.h"
    #include <QApplication>
    #include <QMessageBox>
     
    ToolsLibrary::ToolsLibrary(int n, char *v[])
    {
    	application = new QApplication(n, v);
    }
     
    int ToolsLibrary::handSign()
    {
    	QMessageBox mess(QMessageBox::Information, "Message", "Cette fenêtre est affichée par la dll ToolsLibrary.", QMessageBox::Close);
    	mess.setAttribute(Qt::WA_DeleteOnClose);
    	return mess.exec();
    }
    Je compile le projet, et j'obtiens un fichier dll.

    Ensuite, je passe à mon autre projet, encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "ToolsLibrary.h"
     
    int main(int argc, char* argv[])
    {
    	ToolsLibrary tool(argc, argv);
    	tool.handSign();
    	return 0;
    }
    Afin de lier ma librairie, j'ai ajouté deux lignes dans le .pro, une pour ajouter à INCLUDEPATH le chemin vers le .h de la librairie, et l'autre pour ajouter directement le fichier .dll à LIBS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INCLUDEPATH += \
    	"E:/Developpement/Tests/DLLProject/toolsLibrary"
     
    LIBS += \
    	"E:/Developpement/Tests/DLLProject/shadow/release/toolsLibrary.dll"
    Je compile, et jusque là, tout va bien. Seulement lorsque j'exécute, le programme ne se lance même pas, ou du moins ne parvient même pas à entrer dans la fonction main(). J'obtient seulement le message d'erreur suivant :

    During startup program exited with code 0xc0000135.
    Il me semblait pourtant avoir tout fait correctement. J'ai déjà inclus dans mes projets des librairies externes de la même manière, et je n'ai eu ce problème qu'une seule fois, sans avoir le temps de me pencher dessus avant aujourd'hui.

    Quelqu'un saurait-il me dire si j'ai fait quelque chose de travers ?

    P.S. : Les deux projets ont été réalisés en même temps avec le même environnement, sous Windows 7 et compilés avec MinGW.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon, pour ceux qui pourraient se confronter à un problème similaire, j'ai trouvé de quoi il retourne, et comme d'habitude, c'est un truc tout bête.

    En fête la ligne désignant le fichier .dll dans LIBS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LIBS += \
    	"E:/Developpement/Tests/DLLProject/shadow/release/toolsLibrary.dll"
    Cette ligne ne sert à rien. Au lieu de cela, il faut simplement placer le fichier .dll dans le dossier de l'exécutable, ou dans un dossier indiqué dans la variable d'environnement PATH.

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

Discussions similaires

  1. Appeler une API sans liaison avec une DLL
    Par mat.M dans le forum x86 32-bits / 64-bits
    Réponses: 10
    Dernier message: 13/07/2004, 02h22
  2. Liaison d'une dll Visual C++ dans un programme c++Builder
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/11/2003, 13h49
  3. Utilisation d'une dll écrite en delphi 5 dans VB6
    Par Jean-Louis dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 09h19
  4. Declarer une dll Delphi ?
    Par DelphiCool dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 10h07
  5. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07

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