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 Creator Discussion :

Création de DLL avec Qt Creator 2.3.0


Sujet :

Qt Creator

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Points : 25
    Points
    25
    Par défaut Création de DLL avec Qt Creator 2.3.0
    Bonjour,

    Je voudrais savoir comment il faut procéder pour rendre certaines fonctions visibles depuis une DLL pour les partager et les appeler depuis l'extérieur.

    En recherchant sur Google, pour créer une DLL depuis Qt il faut changer le TEMPLATE passant de "app" à "lib" ou bien on créé un nouveau projet en allant dans "Nouveau projet", puis "Autre" et "Bibliothèque C++".

    J'ai donc créé une nouvelle bibliothèque C++ ayant comme nom de projet "test", la classe test.cpp a donc été créé avec son header. J'ai ajouté une fonction publique dans la classe Test dont la signature est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int Test::pub(int a,int b, int c, int d);
    Lors de la compilation, test.dll est généré mais la fonction pub n'est pas listée dans le logiciel DLL Export Viewer. De plus, il me demande un éxecutable mais je ne sais pas pourquoi il en faut un (peut-être qu'en général une DLL est toujours rattachée à un éxecutable ?):

    éxecutable introuvable, merci d'en spécifier un
    Si quelqu'un pourrait m'éclairer svp

    Merci d'avance !

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Comme vous l'a dit Google, il faut utiliser un template spécifique. Il est très simple de le faire en utilisant le gestionnaire de nouveau projet et en demandant la création d'un projet "Bibliothèque C++"

    QtCreator génèrera ses fichiers. Super. Il y en a un ou deux qui sont intéressant, tel le .h qui déclare des macros permettant l'exportation des fonctions de nos classes.

    Je vous conseille la lecture de cette page: http://qt.developpez.com/doc/latest/plugins-howto/
    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.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Points : 25
    Points
    25
    Par défaut
    Je viens de voir cette page mais je ne vois pas le rapport avec les dll, d'autant plus que je suis débutant en c++ (j'ai les bases).

    tel le .h qui déclare des macros permettant l'exportation des fonctions de nos classes.
    Ne sachant pas ce que sont les macros, j'ai lu cette page et j'ai des questions sur les fonctions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Q_DECLARE_INTERFACE ( ClassName, Identifier )
    Q_EXPORT_PLUGIN2 ( PluginName, ClassName ) 
    Q_IMPORT_PLUGIN ( PluginName )
    A quoi correspond le PluginName et l'Identifier ?

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    PluginName : le nom de votre plugin (ou DLL)
    Identifier : un nom d'identification.

    Sinon, il y a aussi ce cours : http://hiko-seijuro.developpez.com/a...que-dynamique/
    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.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Points : 25
    Points
    25
    Par défaut
    D'après ces liens, il existe plusieurs classes de base plugin, mais comment choisir la classe ? En fonction de quels paramètres ?

    http://qt.developpez.com/doc/4.7/plugins-howto/

    Je n'ai toujours pas compris la notion de macro, après avoir lu cette page http://qt.developpez.com/doc/latest/qtplugin.html

    L'exemple Plug & Paint est complexe, je ne m'y retrouve pas. Elle n'explique pas comment l'utiliser concrètement et je ne sais pas si ça s'éloigne de l'objectif car je ne vois plus le rapport.

    Pour le lien http://hiko-seijuro.developpez.com/a...que-dynamique/, c'est sous Linux et il n'y a pas la notion de QtPlugin ou macro, c'est une méthode différente on dirait. L'article ne m'aide pas beaucoup, c'est plutôt l'inverse.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par johnVSsmith Voir le message
    D'après ces liens, il existe plusieurs classes de base plugin, mais comment choisir la classe ? En fonction de quels paramètres ?

    http://qt.developpez.com/doc/4.7/plugins-howto/

    Je n'ai toujours pas compris la notion de macro, après avoir lu cette page http://qt.developpez.com/doc/latest/qtplugin.html

    L'exemple Plug & Paint est complexe, je ne m'y retrouve pas. Elle n'explique pas comment l'utiliser concrètement et je ne sais pas si ça s'éloigne de l'objectif car je ne vois plus le rapport.

    Pour le lien http://hiko-seijuro.developpez.com/a...que-dynamique/, c'est sous Linux et il n'y a pas la notion de QtPlugin ou macro, c'est une méthode différente on dirait. L'article ne m'aide pas beaucoup, c'est plutôt l'inverse.
    Pour le lien, c'est un tutoriel généraliste pour le C++. Avec Qt c'est différent, car Qt est multiplateforme et donc, ajouter une surcouche au système de plugin.

    Pour le reste, tout est expliqué dans la page de documentation. Je ne peux faire guère mieux.
    Les deux classes à connaitre sont : QPluginLoader et QLibrary. Sur la page, les différences sont expliqués.

    Pour votre problème de base, c'est parce que vous n'avez pas fait l'exportation des symboles correctement (enfin, je pense).
    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.

  7. #7
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Bon mais ça coûte quoi de lui expliquer ce qu'est une macro... Je vais essayer mais je vais peut-être dire des bêtises.

    En C/C++ une macro est une fonctionnalité traitée par le préprocesseur, un genre de raccourci ou de commodité d'écriture, et définie avec #define. En principe elles sont en majuscules. Par exemple :
    Le préprocesseur va remplacer partout CARRE(...) par ...*... ce qui va te permettre d'écrire par exemple CARRE(maLongueur); dans ton code.

    Qt définit des macros pour certaines opérations comme par exemple Q_EXPORT_PLUGIN2 (ctrl-clic dessus pour voir la définition, tu verras que c'est un #define qui fait plein de choses avec les paramètres).

  8. #8
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 601
    Points
    188 601
    Par défaut
    Ajoutons que cette manière de faire n'est pas recommandée dans ce genre de cas : si on fait

    on finira avec le code précompilé

    On aurait pu corriger le problème en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define CARRE(x) (x)*(x)
    mais on préférera plus des fonctions inline :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    inline int carre(int x)
    {
        return x*x; 
    }
    qui donnera le résultat attendu sans syntaxe particulière ou attrape-nigaud. (Tout ça pour dire que, en tant que raccourci dans du code, on n'utilise pas les macros ; par contre, il y a des endroits où on ne peut pas faire autrement, comme Q_OBJECT ou les déclarations de plug-in, justement.)
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    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.

  10. #10
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Ajoutons que cette manière de faire n'est pas recommandée dans ce genre de cas...
    Ah exact, je ne savais plus pourquoi j'avais retenu cet exemple Au moins ça montre ce qu'il ne faut pas faire

Discussions similaires

  1. [WD14] Création de dll avec windev
    Par devalender dans le forum WinDev
    Réponses: 3
    Dernier message: 03/02/2012, 08h30
  2. Création de DLL avec C#
    Par Ekinx93 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 19/06/2011, 23h12
  3. Réponses: 10
    Dernier message: 17/08/2009, 12h39
  4. [Kylix] Création de DLL pour se connecter
    Par aroundzefur dans le forum EDI
    Réponses: 1
    Dernier message: 16/03/2006, 09h58
  5. Problème création de DLL avec CString
    Par loupdeau dans le forum MFC
    Réponses: 3
    Dernier message: 21/07/2005, 20h55

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