Je ne sais pas trop ce que tu cherches comme info et ce que tu connais déjà, mais il existe une méthode relativement simple pour créer un système de plugins "à la main", ce sont les bibliothèques dynamiques (dll sous windows, .so sous linux).
La marche à suivre est la suivante: on définit une interface entre le plugin et le soft, sous la forme suivante:
1- une liste de fonctions que le plugin doit définir
2- une liste de fonctions du soft que le plugin peut appeler
3- des structures de données et éventuellement si on code malproprement, des variables globales.
Ensuite, pour charger un plugin, il suffit d'ouvrir le .so correspondant (avec dlopen) et de charger les symbole définis en 1. Typiquement, si on code en C, on va avoir un objet (structure) de type Plugin, comportant une liste de champs qui sont tous des pointeurs vers les fonctions de 1:
typedef struct _f {
int (*init)(arg1, arg2;
void (*unload)(void);
...
} Plugin;
ensuite on appelle les fonctions de son plugin comme ça:
Plugin *p = ma_fonction_qui_charge_un_plugin(...);
p->init(1, 2);
p->mon_calcul(...);
On code son plugin comme si c'était un module normal du logiciel, en appelant les fonctions définies en 2 lorsqu'on en a besoin. Comme elles sont définies 'extern', on n'a pas besoin d'avoir le soft pour coder le plugin, on a juste besoin de l'interface.
Pour info, GLib propose une abstraction à dlopen qui devrait être plus portable (marcher par exemple sous Windows), et qui s'appelle, si je me souviens bien, g_module.
Dans d'autres langages c'est souvent encore plus simple. Par exemple en Java un plugin peut se résumer à un ensemble de classes implémentant une interface standardisée, que l'on charge avec un ClassLoader au runtime. Pareil en ruby et autres.
# Méthode artisanale
Posté par Yusei (Mastodon) . En réponse au message Architectures à plugins: comment les réaliser en pratique?. Évalué à 4.
La marche à suivre est la suivante: on définit une interface entre le plugin et le soft, sous la forme suivante:
1- une liste de fonctions que le plugin doit définir
2- une liste de fonctions du soft que le plugin peut appeler
3- des structures de données et éventuellement si on code malproprement, des variables globales.
Ensuite, pour charger un plugin, il suffit d'ouvrir le .so correspondant (avec dlopen) et de charger les symbole définis en 1. Typiquement, si on code en C, on va avoir un objet (structure) de type Plugin, comportant une liste de champs qui sont tous des pointeurs vers les fonctions de 1:
typedef struct _f {
int (*init)(arg1, arg2;
void (*unload)(void);
...
} Plugin;
ensuite on appelle les fonctions de son plugin comme ça:
Plugin *p = ma_fonction_qui_charge_un_plugin(...);
p->init(1, 2);
p->mon_calcul(...);
On code son plugin comme si c'était un module normal du logiciel, en appelant les fonctions définies en 2 lorsqu'on en a besoin. Comme elles sont définies 'extern', on n'a pas besoin d'avoir le soft pour coder le plugin, on a juste besoin de l'interface.
Pour info, GLib propose une abstraction à dlopen qui devrait être plus portable (marcher par exemple sous Windows), et qui s'appelle, si je me souviens bien, g_module.
Dans d'autres langages c'est souvent encore plus simple. Par exemple en Java un plugin peut se résumer à un ensemble de classes implémentant une interface standardisée, que l'on charge avec un ClassLoader au runtime. Pareil en ruby et autres.