IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

les classes et les templates dans les plugins


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Par défaut les classes et les templates dans les plugins
    Bonjour

    Je souhaitrai savoir comment je peux utiliser des plugin '.so' contenant des classes C++, j 'ai réussi a créer des plugin avec des fonction dedans mais pas des classes.

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Gros sujet! Si ton ".so" est compilé avec le même compilateur (même version) et les mêmes options de compilation que ton application hôte, il n'y a presque aucune différence avec une bibliothèque statique. Par contre, si il y a le moindre changement, les choses se gâtent: c'est l'un des points faibles du C++ que de ne pas avoir une ABI (spécification binaire) bien définie et suivie par tous les compilateurs et toutes leurs versions, et les plugins en C++ sont une gageure.

    Qu'est-ce que tu cherches à faire exactement?

    Carl

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Par défaut
    Merci pour ta réponse,
    en faite, j'ai trois classes qui servent a prendre n'importe quel tableau ou vector de n'importe quel type et le trie.

    c'est une application graphique, ce que je souhaite c'est que l'application soit séparé des classes de tri et je veux aussi pouvoir par la suite rajouter de nouvelles classes et tous ca sous forme de plugin que je charge par un bouton charger.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je crois que je ne vois pas l'intérêt d'avoir ces algorithmes de tri dans des plugins, s'ils ne diffèrent que par les types de données qu'ils peuvent trier. En effet, chaque bout de code qui devra utiliser un "nouveau" tri parce qu'il a un type pour lequel l'un des tris existants ne fait pas l'affaire devra de toute façon fournir cette implémentation de tri, sous peine de ne pas compiler.

    Dans ton cas de figure, tu devrais plutôt fournir un ou deux templates d'algorithmes de tri dans un header de ton système de base et donner accès à ces headers à ceux qui fourniront des plugins. Ou alors ils utilisent tout simplement std::sort()...

    J'ai peut-être mal compris ton idée. Tu peux m'en dire plus sur tes algos de tri et sur tes classes?

    Carl

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Par défaut
    Bain l'interet des plugin n'est pas immediat, plutard si une personne veux utiliser son propre algorithme, elle le cree et le compile en tant que .so et le charge via l'appliction et ainsi il pourra utiliser son algorithme dans l'application.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Le principe n'est pas compliqué, c'est le mettre en application qui l'est:
    Tu dois créer une bibliothèque commune entre ton application et ton plugin. Cette biblio ne contiendra que des interfaces (si tu ne sais pas ce qu'est une interface ou si tu te dis "oh les interfaces ça existe pas en C++" il est temps d'aller potasser). A noter au passage qu'à priori cette biblio sera toujours header only. Tout dialogue entre ton applic et un plugin ou inversément se fait obligatoirement via des interfaces et rien d'autre point barre.

    Après, à partir du moment où tu sais appeler une fonction dans une librairie dynamique, il suffit de définir une fonction du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TonInterface* givemeyourinterface();
    Et la tu sais tout faire, oui tout, on est dans du pur orienté objet alors quel que soit le ou les problèmes auquel tu pourrais être confronté il y a forcément une solution, mais ça relève de la conception OO.

  7. #7
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Par défaut
    Pour les interfaces je vais m'informer sur ca.

    Par contre, j'ai réalisé un exmple très simple qui illustre mon problème, et j'ai la même erreur.

    mon plugin: test.so
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    extern "C++"
    {
    	#include <stdio.h>
     
    	template< class classTest >
    	void chien( void ) {
    		printf( "\\wof wof/\n" );
    		printf( " \\...../\n" );
    		printf( "   ...\n" );
    		printf( "    .\n" );
    		printf( "     <I________/\n" );
    		printf( "       ||    ||\n" );
    	} // chien()
    }
    mon programme principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #include <iostream>
    #include <dlfcn.h>
     
    using namespace std;
     
    typedef void ( * FCT ) ( void );
     
    int main( void ) {
    	void* dlobj;
     
    	if( dlobj = dlopen( "test.so", RTLD_LAZY ) ) {
     
    		FCT fct_appel = ( FCT ) dlsym( dlobj, "chien" );
     
    		( * fct_appel )< int >();
     
    	}
    	return 0;
    } // main()
    erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    main.cxx: In function «int main()":
    main.cxx:15: erreur: expected primary-expression before «int"
    main.cxx:15: erreur: expected `;' before «int"
    make: *** [main.o] Erreur 1
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/09/2011, 14h50
  2. Réponses: 0
    Dernier message: 29/08/2010, 04h37
  3. Réponses: 1
    Dernier message: 08/08/2008, 17h12
  4. Réponses: 15
    Dernier message: 15/04/2008, 14h25
  5. Récupérer les infos que Eclipse récupere dans les .Class
    Par bortizki.dua dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 25/01/2008, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo