Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2873 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Linux] Bibliothèque dynamique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Linux] Bibliothèque dynamique

n°1769735
hwoarangmy
Posté le 05-08-2008 à 18:05:01  profilanswer
 

Bonjour,
 
J'utilise Linux et g++.
 
Je voudrais générer une bibliothèque dynamique qui permette de créer des objets hérités. Je m'explique :
 
Dans un fichier principal appelé main.cpp, il y aurait la definition d'une classe A qui utilise une classe B, ...
Dans ce meme fichier, il y aurait un appel à une une fonction externe "invoke_classA()" qui renvoie un pointeur sur classe A.
 
Dans le fichier de la librairie dynamique, il y aurait la definition de la fonction "invoke_classA()" ainsi que la définition d'autres classes héritant de A. Ma fonction renverrait un pointeur sur l'une d'elles.
 
Pour schémitiser, on aurait :
main.cpp:
 
classe A
{
   private :
      B elt;
      int number;
 
   public :
      A();
      ~A();
      void set_number(int num);
};
 
A::A() {}
A::~A() {}
void A::set_number(int num) {this->number = num;}
 
 
Et le fichier lib_shar.cpp
class A2 : public A1
{
   public :
      A2();
      ~A2();
      void set_3();
};
 
A2::A2() : A1() {}
A2::~A2() : ~A1() {}
void A2::set_3() {this->set_number(3);}
 
 
Et j'aimerais pouvoir compiler ces 2 fichiers séparement sans avoir à donner à la bibliothèque dynamique la definition de toutes les classes utilisées (Dans l'exemple, il faudrait donner A et B).
 
Est ce que c'est possible ?
 
Merci

mood
Publicité
Posté le 05-08-2008 à 18:05:01  profilanswer
 

n°1769777
Un Program​meur
Posté le 05-08-2008 à 18:37:19  profilanswer
 

Je suppose que la classe A2 herite de A directement ou indirectement (tu utilises A1 qui n'est pas defini).  Non, ce n'est pas possible.  Pour definir une classe, il faut voir la definition de ses classes de base.

n°1769788
hwoarangmy
Posté le 05-08-2008 à 19:29:20  profilanswer
 

Merci pour la réponse. Ca veut dire qu'il faut intégrer 2 fois le code des classes parents, dans la bibliothèque dynamique et dans le programme principal ? C'est dommage ca. Pourtant, je ne vois pas pourquoi les fichiers headers ne sont pas suffisants (le reste peut etre retrouvé lors de l'edition de liens dynamique) ??


Message édité par hwoarangmy le 05-08-2008 à 19:30:27
n°1769789
Joel F
Real men use unique_ptr
Posté le 05-08-2008 à 19:31:56  profilanswer
 

personnellement j'évite d'exporter des classes et je passe par des fonctions libres qui créent/détruisent la classe. Après,une petite interface à la COM pour savoir qui je dois créer en fonction des paramètres et zou :o

n°1769843
hwoarangmy
Posté le 05-08-2008 à 21:00:01  profilanswer
 

Salut,
 
Sur le principe, je suis d'accord mais l'interet, c'est de pouvoir changer la librairie dynamiquement pour pouvoir créer des classes qui n'existent pas au moment ou le programme principal est écrit. Ceci dit, je trouve étonnant (voir dansgereux) qu'il faille dupliquer les classes comme ca (et risquer de les désynchroniser)...

n°1769867
Joel F
Real men use unique_ptr
Posté le 05-08-2008 à 21:54:38  profilanswer
 

on est d'accord aprés c'est un choix. Perso mes plugins dynamiques ils viennent avec un mini XML qui décrit les classes dedans et quand je charge un plugin, j'appelle en premier lieu une fonction qui lit le XML et me remplit ce qu'il faut pr creer les instances qui vont bien.

n°1769874
hwoarangmy
Posté le 05-08-2008 à 22:46:46  profilanswer
 

Merci pour la réponse. Tu utilises un moteur particulier pour parser le xml et créer les classes ?

n°1769914
Joel F
Real men use unique_ptr
Posté le 06-08-2008 à 08:06:14  profilanswer
 

boost::serialization pour la partie XML<->classe

n°1769949
hwoarangmy
Posté le 06-08-2008 à 09:36:51  profilanswer
 

Merci. J'ai essayé de regarder de ce coté mais je n'ai trouvé que des tutoriaux ou la serialization est utilisée pour sauver des données dans des fichiers. Est ce que tu connais des tutoriaux ou ils sont utilisés comme plugins ou est ce que tu aurais un bout de code simple pour comprendre ?
 
Merci

n°1770349
Joel F
Real men use unique_ptr
Posté le 06-08-2008 à 19:46:51  profilanswer
 

j'ai rien là 'est au bureau ou dans les archives. des que j'ai 5 mn je cherche ça ;)

mood
Publicité
Posté le 06-08-2008 à 19:46:51  profilanswer
 

n°1770392
hwoarangmy
Posté le 06-08-2008 à 21:10:49  profilanswer
 

Joel F a écrit :

j'ai rien là 'est au bureau ou dans les archives. des que j'ai 5 mn je cherche ça ;)

Merci beaucoup :D

n°1770396
Joel F
Real men use unique_ptr
Posté le 06-08-2008 à 21:17:28  profilanswer
 

De tête ce que je serialize c'est une classe qui contient la liste des nom des plugins contenant certaines classes (en gros je serialize une map). La première chose que je fais quand je charge bob.so c'est d'appeler la fonction get_registered_elements qui prend en param une map dans laquelle je deserialize bob.xml. Ensuite, cette map est utilisé apr une abtract factory qui sait que si bob.so contient les classe A,B et Foo, les fonction create_A, create_B et create_Foo existe et trouve leur liste de paramètres de constructeurs dans le xml. Ensuite j'attaque cette factory pour instancier/détruire des instances de A,B,Foo etc ...

n°1770488
hwoarangmy
Posté le 07-08-2008 à 08:56:10  profilanswer
 

La, ca devient un petit peu trop compliqué sachant que je ne maitrise pas tous les concepts. Mais effectivement, ca a l'air proche de ce que je cherche. Est ce que tu aurais une source simple ou un tutorial la dessus ?
 
Merci

n°1771474
Amonchakai
Posté le 09-08-2008 à 11:04:07  profilanswer
 

Bonjour,
 
   Je suis ce topic car pour ma culture je suis pas mal intéressé par le design que tu propose Joel F. J'ai donc fait des petites recherches et je suis tombé sur ça :
http://hiko-seijuro.developpez.com [...] dynamique/ . Si j'ai bien compris, ce que tu propose c'est ce qui est présenté dans la seconde partie de l'article sauf qu'au lieu de remplir la map en dur dans le code tu la charge dynamiquement depuis un .xml en utilisant boost::serialization. C'est ça ?
 
Merci pour le partage de connaissances :)

n°1771481
Joel F
Real men use unique_ptr
Posté le 09-08-2008 à 11:47:18  profilanswer
 

en gros oui. Je peut pas en filer plus pour plein de raisons professionnelles :o mais y a tout dans ce lien. Le lien avec serialization est assez trivial à mettre en oeuvre

n°1771489
Amonchakai
Posté le 09-08-2008 à 13:01:37  profilanswer
 

ok, merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Linux] Bibliothèque dynamique

 

Sujets relatifs
Programmation sous linuxComment envoyer un tableau dynamique dans une autre table?
Asservissement de tableau croisé dynamiqueBibliothèque de fonctions PHP 4 pour gérer Base MySQL
[C / Linux] Optimisation de taille sur gcc et -Os ?VStudio 2008 [Erreur lors de la génération dynamique de 'rc.exe']
C++ et linuxAjout dynamique de catégorie
Comment faire du RSH depuis un PC Windows vers un PC Linux ?Linux chargé en mémoire
Plus de sujets relatifs à : [Linux] Bibliothèque dynamique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR