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

C++ Discussion :

question sur le chargement d'une dll à l'execution


Sujet :

C++

  1. #1
    Membre actif Avatar de 5:35pm
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Points : 217
    Points
    217
    Par défaut question sur le chargement d'une dll à l'execution
    Bonjour,

    ma question est simple:

    Je travaille sur un système de plugins, et me demande s'il est possible de charger une dll à l'execution compilé avec un compilo différent de celui de l'application principale. qu'en pensez vous?

    merci

  2. #2
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Il me semble que les décoration de signatures générées par les compilateurs sont définis par celui-ci et empêche donc une telle compatibilité.

    Peut être avec des .def? Je n'y connais pas grand chose avec ces fichiers mais peut être qu'il y a un début de solution avec...

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    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 618
    Points : 188 585
    Points
    188 585
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Il me semble que les décoration de signatures générées par les compilateurs sont définis par celui-ci et empêche donc une telle compatibilité.
    Voir à ce sujet : http://labs.trolltech.com/blogs/2009...compatibility/

    Les différents compilateurs nomment les fonctions très différemment, mais il peut être possible d'outrepasser cette différence (comme avec la classe QLibrary de Qt : elle pourrait t'inspirer, même si tu n'utilises pas Qt. Voici les sources : http://qt.gitorious.org/qt/qt/trees/...corelib/plugin).

    Citation Envoyé par Klaim Voir le message
    Peut être avec des .def? Je n'y connais pas grand chose avec ces fichiers mais peut être qu'il y a un début de solution avec...
    Les .def contiennent les noms des fonctions d'un fichier de bibliothèque dynamique. Il sert, par exemple, à recréer les fichiers .a ou .lib utilisés par le linker. Ils servent donc à lier à la compilation. Or, un système de plug-in préfèrera une liaison à l'exécution.

    Je te dirais de jeter un oeil à QLibrary et à son implémentation pour en savoir plus. La classe QPluginLoader pourrait aussi t'être utile.
    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 !

  4. #4
    Membre actif Avatar de 5:35pm
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    merci pour les réponses.

    @Klaim: Tu serais pas le Klaim des forums Ogre3d par hazard?
    @dourou: la vache 16 ans! je vois en toi deux destinés possible, soit recruté, soit recherché par les services secrets!

    le problème de la décoration est facilement résolu avec MSVC grace à la fonction UnDecorateSymbolName disponible dans Dbghelp.dll (dll inclu avec windows)
    [il a du bien s'emmerder le gars de chez qt]

    Le problème est qu'une api est fournit avec les plugins (des headers), implémenté dans une dll de l'appli. et donc il faut un linkage statique au niveau du plugin, ce n'est pas avec les .def ou .lib de chez msvc qui permettra aux autres compilos de déchiffrer.
    ensuite vient le problèmes des conventions (__stdcall, __fastcall...) spécifique au compilateur qui va déterminer au niveau binaire comment une fonction s'apelle (où stocker arguments etc...)

    j'ai survollé le code de qt, qui utilise une classe "QLibraryPrivate" que j'ai pas trouvé, si quelqu'un a le lien je serais curieux de voir comment ils ont fait! (s'ils l'ont vraiment fait)

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    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 618
    Points : 188 585
    Points
    188 585
    Par défaut
    Citation Envoyé par 5:35pm Voir le message
    @dourou: la vache 16 ans! je vois en toi deux destinés possible, soit recruté, soit recherché par les services secrets!
    Ah, c'est pour ça que je change si souvent de maison ! J'avais pas compris .

    Citation Envoyé par 5:35pm Voir le message
    le problème de la décoration est facilement résolu avec MSVC grace à la fonction UnDecorateSymbolName disponible dans Dbghelp.dll (dll inclu avec windows)
    [il a du bien s'emmerder le gars de chez qt]

    Le problème est qu'une api est fournit avec les plugins (des headers), implémenté dans une dll de l'appli. et donc il faut un linkage statique au niveau du plugin, ce n'est pas avec les .def ou .lib de chez msvc qui permettra aux autres compilos de déchiffrer.
    ensuite vient le problèmes des conventions (__stdcall, __fastcall...) spécifique au compilateur qui va déterminer au niveau binaire comment une fonction s'apelle (où stocker arguments etc...)

    j'ai survollé le code de qt, qui utilise une classe "QLibraryPrivate" que j'ai pas trouvé, si quelqu'un a le lien je serais curieux de voir comment ils ont fait! (s'ils l'ont vraiment fait)
    Ta classe est ici :
    .h : http://qt.gitorious.org/qt/qt/blobs/...n/qlibrary_p.h
    .cpp : http://qt.gitorious.org/qt/qt/blobs/...ibrary_win.cpp
    (ou http://qt.gitorious.org/qt/qt/blobs/...brary_unix.cpp)

    Si tu as des problèmes pour comprendre le système, viens poster dans le forum Qt : http://www.developpez.net/forums/f37...liotheques/qt/. Il y a là des gens très habitués à la lib, voire même qui contribuent du côté Nokia à la lib...
    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 !

  6. #6
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    @Klaim: Tu serais pas le Klaim des forums Ogre3d par hazard?
    Si.

Discussions similaires

  1. Chargement d'une Dll C++ sur VB 2008
    Par Linkis dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/07/2012, 09h36
  2. Réponses: 6
    Dernier message: 31/08/2009, 17h41
  3. Question sur le chargement d'une image
    Par mihabi dans le forum OpenCV
    Réponses: 2
    Dernier message: 27/03/2009, 11h45
  4. Réponses: 5
    Dernier message: 13/10/2005, 12h46
  5. Chargement d'une DLL et utilisation du multithread
    Par Maitre Kanter dans le forum Langage
    Réponses: 6
    Dernier message: 07/09/2004, 23h18

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