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 :

Plug-in == DLL ?


Sujet :

Qt

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Plug-in == DLL ?
    Bonjour à tous,

    J'ai effectué quelques recherches sur le net mais je n'ai pas trouvé de réponse claire net et précise.

    Je sais qu'un plug-in dans le monde QT, c'est une DLL qui implémente une interface du programme principal sur lequel on veut "plugé" le plug-in. Bon.
    Autrement dit, utiliser un plug-in, c'est utiliser une DLL.

    Mais j'ai 2 questions à ce sujet:
    - est-ce que l'utilisation de plugin dans une application QT est l'unique moyen d'importer une DLL ?
    - est-ce que ce plugin/DLL doit être écrit en langage C comme j'ai pu le lire quelque part ? ou alors c'est du C++/QT plus éventuellement autre librairie C++ ?

    Merci à vous

  2. #2
    Membre averti

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    il me semble qu'en répondant juste au titre on peut répondre aux deux questions :
    Il est tout a fait possible de créer des plugins statiques qui seront ajoutés au programme à la compilation.

    L'exemple le plus complet avec Qt se trouve ici : http://qt.developpez.com/doc/latest/...gandpaint.html

    Du coup pour répondre aux questions :
    1 - Une DLL n'étant pas forcement un plugin ni écrit avec Qt, c'est plutôt du coté de l'instruction "dllimport" qu'il faut regarder.
    2 - ça dépend de la façon dont l'application est faite : si elle utilise Qt pour sa gestion de plugin, le plugin doit être en c++/Qt...

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Merci de votre réponse.

    J'ai fait pas mal de recherches depuis mon premier post et je crois que je commence à cerner le tableau (enfin, juste assez pour faire marcher ce dont j'ai besoin, pas pour comprendre réellement les mécanismes de bibliothèque mais je crois c'est un peu trop compliqué pour moi).

    J'ai donc vu que l'on peut importer une librairie statique ou dynamique (comme dans n'importe quel programme C++ en fait...) dans du code Qt. Je ne suis pas encore tout à fait sûr quant à la procédure: est-elle la même lorsque la DLL contient du Qt et lorsqu'elle n'en contient pas (je crois que la réponse est oui, mais j'attends de tester) ?

    Pour ce qui est des plug-ins, j'ai réuni pas mal de doc sur le sujet donc je m'en sortirai pour le codage. Cependant, vu que ce que je souhaite importer comme librairie, c'est un code C++ avec du Boost, je vais m'orienter vers l'import standard de DLL.

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 65
    Points : 104
    Points
    104
    Par défaut
    Un plug-in Qt est une implémentation spéciale, avec les macros de déclarations d'interface(s) et chargement avec QPluginLoader. Tu obtiens, une fois chargé correctement, un objet dérivant de l'interface.

    Une DLL est juste un ensemble de fonctions et de classes dont les symboles (fonctions) sont exportés, en gros accessibles depuis l’extérieur. Que ce soit une DLL crée avec ou sans Qt (attention tout de fois aux types de retours), on le charge avec QLibrary, puis on demande une fonction avec resolve. Example, si je veux charger dynamiquement la fonction suivante, présente dans dwmapi.dll (Vista & suivants) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HRESULT DwmExtendFrameIntoClientArea(HWND, const MARGINS*);
    Je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // Déclarations nécessaires pour charger la fonction
    typedef HRESULT (WINAPI *t_DwmExtendFrameIntoClientArea)(HWND, const MARGINS*);
    static t_DwmExtendFrameIntoClientArea f_DwmExtendFrameIntoClientArea = 0;
     
    // On charge la fonction
    QLibrary dwmapi("dwmapi");
    f_DwmExtendFrameIntoClientArea = (t_DwmExtendFrameIntoClientArea)dwmapi.resolve("DwmExtendFrameIntoClientArea");
     
    // On peut ensuite appeler la fonction comme une fonction standard
    f_DwmExtendFrameIntoClientArea(winId(), myMargins);
    Le chargement d'une fonction est un peu plus complexe que pour un plugin (définitions supplémentaires).

    Le code est le même (au prototype de fonction près) si la fonction est dans une lib Qt. Il faut juste qu'elle soit exportée. Tu obtiens une fonction.

    Il doit être possible de charger une classe dynamiquement mais la je sais pas faire.

Discussions similaires

  1. dll, add-in, plug-in : Que sont ce?
    Par PeD012 dans le forum VB.NET
    Réponses: 6
    Dernier message: 01/12/2011, 21h52
  2. DLL et plug-in
    Par theMonz31 dans le forum C#
    Réponses: 8
    Dernier message: 03/11/2009, 17h50
  3. Une bibliothèque portable pour la gestion des dlls (plug-ins)
    Par Spartan03 dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 20/11/2006, 19h33
  4. DLL & Plug-ins
    Par VincentB dans le forum Langage
    Réponses: 6
    Dernier message: 19/06/2003, 17h16

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