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 :

Rendre un logiciel compatible avec des plugins


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut Rendre un logiciel compatible avec des plugins
    Bonjour,

    Je précise que j'ai peu d'expérience en développement et que je dois attaquer un projet avec les indications suivantes :


    Un logiciel existe déjà et on ne veut pas toucher à sa structure mais rajouter des besoins spécifiques, des fonctions supplémentaires.
    Donc en gros, c'est la notion de plugin que je connais bien en tant qu'utilisateur de logiciels divers.

    maintenant au niveau code, comment ça marche; que rajouter dans le code du logiciel et comment l'interfacer avec ces fonctionnalités nouvelles (elles-mêmes, quelles formes doivent-elles avoir).

    Merci pour vos pistes.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Typiquement des bibliothèques à liaison dynamique (.so sous Linux, .dll sous Windows).

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    D'accord pour les DLL; peux-tu me dire comment ces DLL interviennent dans le logiciel (je vais chercher comment faire une DLL mais ce que je ne visualise pas, c'est comment dans certains cas on va utiliser la DLL avec les options correspondantes aux nouvelles fonctions du logiciel, et dans d'autres cas on n'utilise pas de nouvelles fonctionnalités)

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Généralement, les plug-ins ont une interface commune (ou bien, plusieurs types de plug-ins avec une interface commune).

    Regarde dans WMP ou dans WinAmp par exemple, chaque plug-in a un type (input, output, etc).
    À partir de là, le plug-in est une DLL chargée dynamiquement, avec une interface précise (Des fonctions exportées qui ont toujours le même nom).
    Sous WinAmp je ne sais pas, mais ça peut être un simple chargement avec LoadLibrary() + GetProcAddress(), sous WMP il me semble que ce sont des composants COM, encore qu'un LoadLibrary() normal soit sûrement nécessaire tant qu'on ne connait pas l'ID des composants...

  5. #5
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Une bibliothèque partagée, est définie pour étendre ton logiciel.

    On va prendre comme exemple l'exportation d'une image via des pluggins (certains appellent cela des greffons).

    Le principe pour que ça fonctionne est que les pluggins aient une interface standard, c'est à dire qu'ils possèdent tous les mêmes fonctions.

    Ainsi pour l'exportation d'une image, tu auras toujours dans chaque pluggin une fonction exporter. Tu pourras avoir une fonction qui te permette d'effectuer un paramètrage, etc ...

    Ensuite, pour ce qui est de la réalisation, tout est dépendant de ton système d'exploitation. Sous linux, tu as les fonctions dlsym/dlopen ... sous windows, je ne sais pas

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par PRomu@ld
    sous windows, je ne sais pas
    Pas de chance, c'est sous Windows
    Sinon le logiciel a été créé sous LabWindows pour être plus précis.

    Alors dans mes lectures sur des plugins, j'ai l'impression que les développeurs utilisent toujours le SDK fourni avec le logiciel qui accepte les plugins.
    Par exemple j'ai vu un tutoriel pour un plugin WinAmp et pour mettre en liaison WinAmp et le plugin, il faut appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    __declspec( dllexport ) winampVisHeader *winampVisGetHeader()
    {
     
         return &hdr;
    }
    A partir de là, OK, mais c'est pas le cas ici puisque le logiciel artisanal auquel je dois rajouter des plugins n'a pas encore été prévu pour ça (d'où le boulot que j'ai à faire).

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ben tu dois faire un truc du même genre : Il y a toujours une interface fixe.
    Pour les composants COM, les fonctions DllGetClassObject() et DllCanUnloadNow() doivent être définies et exportées
    (Ainsi que DllRegisterServer() et DllUnregisterServer() pour l'installation).

    Pour les types renvoyés et pour éviter de faire des GetProcAddress() à gogo, tu peux utiliser une classe abstraite ne possédant que des fonctions membres virtuelles pures, et retourner un objet descendant de cette classe (c'est ce que font les composants COM avec leurs "interfaces").

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/03/2015, 21h07
  2. Rendre mon logiciel executable avec la Base de données
    Par japhettchabao dans le forum Débuter
    Réponses: 2
    Dernier message: 21/01/2015, 12h11
  3. Rendre une classe compatible avec tous les navigateurs
    Par BXDSPORT dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 20/02/2014, 11h06
  4. [Techniques et Conseils] Creer un logiciel extensible ( avec des modules )
    Par handsome01 dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 12/01/2014, 23h59
  5. [RELEASE]comment faire avec des plugins Snapshot ?
    Par djeanprost dans le forum Maven
    Réponses: 3
    Dernier message: 07/06/2007, 14h30

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