[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]

Re: Ecrire des modules en C++ sous Linux



Charles Levert:
>Qui dit plug-in dit dlopen(), dlsym() et cie, d'une part.
>D'autre part, le C++ utilise une technique appelée mangling
>pour encoder la signature exacte (type des paramètres...)
>dans le nom des symboles exportés par un fichier objet.
>En plus, il y a possiblement plusieurs constructeurs
>pour une classe.
    [...]

J'ai conçu un petit démo en C et en C++:
http://www3.sympatico.ca/sarrazip/demo-dll-linux.tar.gz

Même en C++, je n'exporte que des fonctions suivant la
convention du C (cf extern "C"), de sorte que le problème
de name mangling ne se pose pas.

Pour un système de modules, je verrais le programme principal
utiliser une classe de base abstraite nommée Module qui
serait dotée de toutes les méthodes virtuelles appropriées.
Un module donné définirait une classe dérivée et fournirait
une fonction

    Module *donneModule();

qui retournerait un pointeur sur une instance de la classe
dérivée contenue dans le module.

Le programme principal chargerait donc un module, utiliserait
dlsym() pour aller chercher l'adresse de la fonction
donneModule() de ce module, et appelerait cette fonction
pour obtenir l'objet dérivé de Module.

-- 
Pierre Sarrazin <http://www3.sympatico.ca/sarrazip>