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 :

Système de plugins


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Points : 73
    Points
    73
    Par défaut Système de plugins
    Comment créer un système de plugins ( simple ) en C ?

    merci de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    C'est plutôt vague comme question ...

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    C'est une question assez vague qui dépend beaucoup de ton système. Sous unixoïde, une stratégie possible est de créer une bibliothèque partagée (.so) et d'utiliser les fonction dlopen(), dlsym() et dlclose() pour implanter le chargeur de plugins.

    Sous windows, on peut créer une DLL et se servir des fonction de l'API Win32 LoadLibrary(), GetProcAddress() et FreeLibrary() pour implanter le chargeur.

    Je n'ai malheureusement pas le temps de montrer un exemple complet maintenant. Mais je vais essayer de pondre un exemple rapide tout à l'heure. Si tu recherches une solution portable, il est possible également d'utiliser l'API GModule de la glib pour implanter un système de plugins portable.

    D'autres approches sont possibles, comme par exemple embarquer un interpréteur Python (ou Perl, ou Ruby) dans son application et permettre ainsi à l'utilisateur d'implanter des plugins en Python de manière très portable. Tout cela mériterait un article complet, et il est difficile de répondre à ta question sans en savoir plus sur ce que tu recherches, tes éventuelles contraintes, etc.

    Thierry

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Points : 73
    Points
    73
    Par défaut
    Pour le moment, je ne me concacre que à windows.
    Donc la meilleur solution serait les DLL ?

    Je pensais à avoir une DLL qui va charger les plugins dans le répertoire plugin de mon application de cette façon :
    - ouvrir le répertoire plugin
    - rechercher tout les fichier dll
    - si le fichier dll contient une fonction getNom() et getModifier(char*)
    - On affecte un ID à la DLL.
    - Sinon on ne s'occupe pas du fichier.

    Plus tard dans l'application.
    Si l'utilisateur tape l'ID de la DLL alors on lui demande de founir un type char*.
    et ensuite on appel la fonction getModifier(char*)
    de la DLL.

    Est que ceci est une bonne solution ?



    PS: Je cherche a faire pour le moment un système simple de plugin. on founie en entrée un type char* pour récupérer en sortie en autre type char*.
    Exemple je tape trois.
    le texte passe dans la dll il me retourne siort.
    etc...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Points : 73
    Points
    73
    Par défaut
    up !!!
    Quelqu'un d'autre peut me conseiler ou me donner un code simple ?

    merci

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Bin pas 36 solutions, soit tu fait des DLL (Windows) et des .so (Linux) ou bien tu intègre un langage de script comme Python dans ton programme

    J'aurais un exemple à te montrer mais c'est sous Linux ... mais c'est surtout sur GTK+ et j'utilise la GLib pour charger la liaison dynamique (on peut également charger des DLL avec les mêmes fonctions) ... Voici le code:

    Code de chargement de plugin (ici en fichier *.so mais idem que pour *.dll avec la GLib)
    Plugin de test

    Voilà, j'espère que ca t'ira

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Franck.H
    Bin pas 36 solutions, soit tu fait des DLL (Windows) et des .so (Linux) ou bien tu intègre un langage de script comme Python dans ton programme

    J'aurais un exemple à te montrer mais c'est sous Linux ... mais c'est surtout sur GTK+ et j'utilise la GLib pour charger la liaison dynamique (on peut également charger des DLL avec les mêmes fonctions) ... Voici le code:

    Code de chargement de plugin (ici en fichier *.so mais idem que pour *.dll avec la GLib)
    Plugin de test

    Voilà, j'espère que ca t'ira
    Et moi qui recherchais le code original de CWorkshop... Voilà que je retombe dessus. Ce projet me sert de support d'expérimentation depuis pas mal de temps pour mon apprentissage du C et de GTK+. J'ai notamment ingégré un interpréteur Python pour le système de plugins... Je mets un peu d'ordre dans mon code et je poste un exemple.

    Thierry

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par mujigka
    Et moi qui recherchais le code original de CWorkshop... Voilà que je retombe dessus. Ce projet me sert de support d'expérimentation depuis pas mal de temps pour mon apprentissage du C et de GTK+. J'ai notamment ingégré un interpréteur Python pour le système de plugins... Je mets un peu d'ordre dans mon code et je poste un exemple.

    Thierry
    Comme quoi ... même les projets abandonnés peuvent servir à quelque chose

Discussions similaires

  1. Système de plugins pour charger des modules au runtime
    Par simon.brandhof dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 21/08/2008, 12h13
  2. [PHP5] Système de plugin/module
    Par Anified dans le forum Langage
    Réponses: 2
    Dernier message: 26/06/2008, 22h46
  3. Système de Plugins "réutilisable"
    Par mctd02 dans le forum Design Patterns
    Réponses: 2
    Dernier message: 31/10/2007, 17h54
  4. création d'un système de plugin
    Par st20085 dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 05/02/2007, 23h37
  5. Ajout d'une commande système à un plugin ?
    Par kafifi dans le forum C++
    Réponses: 11
    Dernier message: 15/07/2006, 17h57

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