PlugIns
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
PlugIns
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 ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
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.
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.

- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
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 ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
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
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
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Pourrais tu m'indiquer quel code serait le plus intéressant sur l page montré ? 

Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Bon, bah désolé, mais je n'ai pas compris le code !
Donc disons que j'ai deux DLL Pure
DLL : action1.dll
DLL : action2.dll
Comment peut on appeler la première fonction Info puis ensuite la 2nde, idem pour action1 ?
Merci d'avance de votre aide
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
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
Merci d'avance de votre aide

Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
bah tes plugins faut les charger avec loadlibrary...
Dri
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")
-
- Messages : 1092
- Inscription : mer. 28/janv./2004 16:22
- Localisation : 76
- Contact :
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
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL

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
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
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Bah voilà, là j'ai compris ! Merci Messieurs !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Une question dans l'exemple que vous avez donné
main.exe
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
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
Comment vous faites pour récuperer du texte provenant d'une fonction appelé par un callfunction ?
Merci

Code : Tout sélectionner
chaine.s = peeks( callfunction(...) )
