Page 1 sur 1
PlugIns
Publié : jeu. 01/sept./2005 8:38
par Progi1984
Voilà, ce sujet est une discussion sur la mise en place de plugins dans une application PureBasic. Comment cela pourrait il etre mis en place ?
Publié : jeu. 01/sept./2005 9:48
par Flype
ya 1001 manières de faire mais en voici une :
1/ Créer un répertoire PLUGINS à la racine de ton application
2/ Remplir ce répertoire de fichiers DLL (pluginProgi.dll, pluginTest.dll, etc.)
3/ Déterminer une structure rigoureuse pour tes DLL pour que chaque DLL ai exactement les mêmes fonctions dedans.
4/ Dans l'appli, charger toutes les DLL présentent dans le dossier PLUGINS avec une liste ou un tableau.
Une DLL aura donc un nombre de fonctions déterminées, par exemple :
ProcedureDLL PLUGIN_GetAuthor()
ProcedureDLL PLUGIN_GetVersion()
ProcedureDLL PLUGIN_GetDescription()
ProcedureDLL PLUGIN_GetImage()
ProcedureDLL PLUGIN_Function1()
ProcedureDLL PLUGIN_Function2()
ProcedureDLL PLUGIN_Function3()
je ferais comme çà moi.

Publié : jeu. 01/sept./2005 10:26
par Dr. Dri
c'est comme ca ke j'ai fait pour mes codes barres... une fonction qui renvoi l'adresse de la datasection, une qui permet de savoir si les données entrées sont valides, une qui permet de calculer le résultat etc...
Dri
Publié : jeu. 01/sept./2005 22:22
par Progi1984
Le truc que je comprends pas, c'est que si les il ya les mêmes fonctions dans chaque DLL, mais leur effet étant différent en fonction du plugin. Comment utiliser une fonction d'une DLL plutot qu'un autre ? un code d'exemple ?
Publié : jeu. 01/sept./2005 22:47
par Dr. Dri
bah c'est simple, je te sors un topic d'exemple ^^
http://purebasic.hmt-forum.com/viewtopic.php?t=3268
c'est pas des plugins mais c'est tout comme... c'est pour ajouter des icônes dans le panneau de configuration... les dll contiennent des fonctions de même nom. comment différencier l'appel vers les dll ? en fonction de l'icône cliquée... dans une appli ca peut se différencier avec un menu, un combobox...
Dri
Publié : ven. 02/sept./2005 10:42
par Progi1984
Pourrais tu m'indiquer quel code serait le plus intéressant sur l page montré ?

Publié : mer. 07/sept./2005 10:27
par Progi1984
Bon, bah désolé, mais je n'ai pas compris le code !
Donc disons que j'ai deux DLL Pure
DLL : action1.dll
Code : Tout sélectionner
ProcedureDLL DLL_Info()
ProcedureReturn "Suis la premiere DLL"
endprocedure
ProcedureDLL DLL_Action1(file1)
;action sur un fichier
endprocedure
DLL : action2.dll
Code : Tout sélectionner
ProcedureDLL DLL_Info()
ProcedureReturn "Suis la DLL 2"
endprocedure
ProcedureDLL DLL_Action1(file1)
;action sur un fichier mais pas la meme action que dans la premier DLL
endprocedure
Comment peut on appeler la première fonction Info puis ensuite la 2nde, idem pour action1 ?
Merci d'avance de votre aide

Publié : mer. 07/sept./2005 12:12
par Dr. Dri
bah tes plugins faut les charger avec loadlibrary...
Code : Tout sélectionner
plugin1 = loadlibrary(#pb_any, "action1.dll")
plugin2 = loadlibrary(#pb_any, "action2.dll")
debug callfunction(plugin1, "DLL_Info")
debug callfunction(plugin2, "DLL_Info")
Dri
Publié : mer. 07/sept./2005 12:36
par Heis Spiter
Plus souple :
Code : Tout sélectionner
Dim plug.l(1000)
If ExamineDirectory(1, "", "*.dll")
i = 0
Repeat
NextD = NextDirectoryEntry()
If NextD = 0
Break
EndIf
name$ = DirectoryEntryName()
plug(i) = OpenLibrary(#PB_Any, name$)
i = i + 1
Until NextD = 0
EndIf
For k = 0 To i
CallFunction(plug(i), "DLL_Info")
Next k
Publié : mer. 07/sept./2005 12:57
par Dr. Dri
c'était pour l'exemple mais c'est clair que je ne vais pas gérer des plugins avec des variables lol!
moi j'opte plutôt pour une structure qui contient la liste des fonctions (et des labels aussi par exemples si y'a des datasection)
et je crée une liste de cette structure que j'alimente au chargement des plugins... du coup je passe plutôt par callfunctionfast
Dri
Publié : mer. 07/sept./2005 13:38
par Progi1984
Bah voilà, là j'ai compris ! Merci Messieurs !
Publié : mer. 07/sept./2005 15:31
par Flype
de rien monsieur. (j'ai pas fais grand chose sur ce coup là)

Publié : sam. 17/sept./2005 20:24
par Thyphoon
Une question dans l'exemple que vous avez donné
main.exe
Code : Tout sélectionner
plugin1 = loadlibrary(#pb_any, "action1.dll")
debug callfunction(plugin1, "DLL_Info")
[code]
.dll[code]ProcedureDLL DLL_Info()
ProcedureReturn "Suis la premiere DLL"
endprocedure
lorsque j'appel le programme avec callfunction je reçois une valeur numérique et pas du text :!!! et même si je met ProcedureDLL.s
Comment vous faites pour récuperer du texte provenant d'une fonction appelé par un callfunction ?
Merci

Publié : sam. 17/sept./2005 22:16
par Dr. Dri
Dri

Publié : dim. 18/sept./2005 17:25
par Thyphoon
genial merci !!!
