Bonjour à tous,
Je suis en train de m'atteler aux chargements dynamiques de classes en C++ sous Linux. Je me base sur le document Exportation de classes C++ dans une bibliothèque dynamique sous Linux de hiko-seijuro (que je remercie au passage).
Je n'ai trop pas de soucis pour comprendre le principe des exemples utilisés, mais quelques interrogations demeurent. Je me base sur le code source de la deuxième partie du document "III - Création, exportation et utilisation des classes C++".
------------------------------
*Une des premières lignes de code utilisée est :
Je ne comprend pas vraiment de quoi il s'agit. Serait-ce une déclaration de fonction attendant d'être défini plus tard?
Un peu plus loin, hndl est utilisée de cette manière :
hndl = dlopen("./libcircle.so", RTLD_LAZY);
Mais le constructeur de dlopen ne semble pas correspondre avec cette ligne (à mon sens, du moins, d'où mon inconpréhension).
void *dlopen (const char *filename, int flag);
Au final, dlopen(... ...) ne devrait rien retourner. Comment donc affecter le retour de cette fonction au pointeur hndl?
------------------------------
*Je ne comprend pas du tout la syntaxe de ce typedef :
typedef circle *(*maker_circle)();
Je n'arrive pas du tout à comprendre ce que ça signifie, et son implantation de le code final ne parviends pas à m'aider.
De la même manière, je ne comprend pas du tout son utilisation :
1 2 3 4 5
| maker_circle pMaker;
//un peu plus loin
void *mkr = dlsym(hndl, "make_circle");
//Puis encore plus loin
pMaker = (maker_circle)mkr; |
Je ne comprend pas du tout la syntaxe, une fois de plus. Je suis incapable de saisir le sens des ces quelques lignes.
A ce propos, toujours à propos du typedef. Je cite la page 7.
1 2 3 4 5 6 7 8 9 10 11
| #ifndef CIRCLE_H_
#define CIRCLE_H_
#include <iostream>
class circle
{
public:
virtual void draw();
};
typedef circle *(*maker_circle)();
#endif |
[...] Les 2 typedefs permettent d'alléger la syntaxe du programme principal que l'on verra dans le point suivant.
Pourtant, je ne vois qu'un seul typedef. A moins que je n'ai pas interpreté correctement le code.
------------------------------
Pourriez-vous m'éclairer un peu là dessus?
Merci et bon début de semaine.
Partager