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) :
HRESULT DwmExtendFrameIntoClientArea(HWND, const MARGINS*);
Je fais :
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.
Partager