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
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
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...
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).
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 !
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)
Ah, c'est pour ça que je change si souvent de maison ! J'avais pas compris .
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 !
Si.@Klaim: Tu serais pas le Klaim des forums Ogre3d par hazard?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager