[C/C++] DLL sous forme de plugins

Le côté programmation du développement d'un jeu vidéo.

DLL sous forme de plugins

Messagepar deathangel » 30 Sep 2010, 17:44

Salut la foule, je reviens avec un petit problème de C++, mais je sais pas trop comment chercher ca sous google si ca a un nom explicite ou pas, je vais donc donner un exemple :

Donc imaginons, j'ai une application Toto qui doit pouvoir charger tous types de fichiers.

J'ai une interface Reader C++ qui définit les fonctions open et read en virtuelle pure.

J'ai ensuite des DLL qui se chargent de définir les fonctions de lecture pour chaque type de fichier : PSDReader, TXTReader, INFReader, ...

Je souhaiterais maintenant que quand je lance mon application, il liste les DLL présentes d'un répertoire ou il trouve le PSDReader, TXTReader.... et me les charge automatiquement.
Si je rajoute une nouvelle DLL il peut me la charger aussi.

Dans mon programme Toto, j'accède toujours par le biais de mon interface à load et read qui utilise alors la bonne DLL par polymorphisme.

Donc quelques questions :
1. comment ca s'appelle ?
2. est-ce que c'est faisable ? (normalement oui, y a pas mal d'applis qui marchent comme ca)
3. est-ce que c'est portable Linux/Windows ? (on peut rêver, ma priorité c'est Windows)
4. est-ce que ca risque pas d'être une usine à gaz à coder avec des AFX/MFC et tous les trucs windows louches ?

si quelqu'un a un petit lien je suis preneur :p

Merci d'avance pour vos réponses et avis éclairés ^^



EDIT : MOUARF, en fait j'ai très mal cherché, la fatigue du soir, j'ai trouvé mon bonheur je pense sur ce site : http://www.flipcode.com/archives/Adding_Plug-ins_To_Your_Application.shtml
à tester demain
95% des problèmes informatiques se situent entre la chaise et le clavier
--> Créez votre robot chien : http://doggyproject.free.fr/
--> Gagnez des PACK+ gratuitement : http://www.packbarre.com/
--> S.U.S Tennis de table http://www.sus.asso.fr
Avatar de l’utilisateur
deathangel
Hello World, I'm new !
 
Messages: 963
Inscription: 10 Avr 2005, 08:50
Localisation: Strasbourg

Messagepar iliak » 01 Oct 2010, 11:18

Salut,

J'avais fait ça à l'époque, ça marchait très bien, mais pas parfait et très explosif niveau bug. "LE" truc à garder en permanence en mémoire (si je ne me trompe pas), c'est que tout ce qui est alloué dans ton plugin doit être libéré par ton plugin et tout ce qui est alloué par ton framework (ton appli qui utilise les pugin) doit être libéré par ton framework. Il ne faut SURTOUT pas mixer, sinon boum. Puis aussi, ce qui est alloué sur ta pile par ton plugin a une importance. Bref, je ne me rappelle plus précisément, fais bien gaffe à ce niveau...

Pour ce qui est de ta demande, fais un tour sur google avec "dll plugin c++" et tu vas trouver ton bonheur.
- Iliak -
[http://www.mimicprod.net ArcEngine : a free 2D .Net gaming framework]
[http://www.dungeoneye.net Dungeon Eye : Remake open source de Eye of the beholder II]
iliak
Hello World, I'm new !
 
Messages: 141
Inscription: 25 Fév 2010, 14:53

Messagepar Gavos » 01 Oct 2010, 14:24

Effectivement, c'est une mauvaise idée d'allouer dans une DLL et de libérer ailleurs. Je sais que sous Visual Studio ça peut tomber en marche si tu compiles en mode Release donc c'est trompeur, donc il faut pas attendre le bug pour faire attention.
Gavos
 
Messages: 1076
Inscription: 19 Mar 2005, 13:00

Messagepar deathangel » 01 Oct 2010, 14:30

Merci pour vos réponses, j'ai réussi à faire un petit système de test pour vérifier, et tout fonctionne très bien, je vais pouvoir me lancer dans la grosse application.

Merci pour vos conseils, je vais surveiller tout ça niveau mémoire & co
95% des problèmes informatiques se situent entre la chaise et le clavier
--> Créez votre robot chien : http://doggyproject.free.fr/
--> Gagnez des PACK+ gratuitement : http://www.packbarre.com/
--> S.U.S Tennis de table http://www.sus.asso.fr
Avatar de l’utilisateur
deathangel
Hello World, I'm new !
 
Messages: 963
Inscription: 10 Avr 2005, 08:50
Localisation: Strasbourg


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 9 invités

cron