Lecture librairie dynamique
Bonjour,
j'ai un petit soucis avec un warning :
Citation:
ISO C++ forbids casting between pointer-to-function and pointer-to-object
J'ai créer un système de plugin, ou je crée des classes depuis des librairies dynamiques.
Le code (sans la gestion des exceptions) :
Code:
1 2 3 4
|
handle = dlopen(_path.c_str(), RTLD_LAZY);
create_t* createPlg = (create_t*) dlsym(handle, "create"); // Le warning est ici.
PlgAbstract* newPlg = createPlg(); |
Et la définition de la méthode create :
Code:
typedef PlgAbstract* create_t();
Et chacun de mes plugins hérite de PlgAbstract.
Je comprend que je crée une fonction à partir d'un symbole qui représente une classe. Mais comment faire le cast entre les deux reste pour moi un mystère.
p.s. Le code est fonctionnel, mais j'ai lu qu'il peut y avoir une différence de taille entre l'objet et la fonction que je crée.