PlugIns

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

PlugIns

Message 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 ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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. :roll:
Image
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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 ?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Pourrais tu m'indiquer quel code serait le plus intéressant sur l page montré ? :D
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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 :D
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message 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
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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Bah voilà, là j'ai compris ! Merci Messieurs !
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

de rien monsieur. (j'ai pas fais grand chose sur ce coup là) :P
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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 :P
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Code : Tout sélectionner

chaine.s = peeks( callfunction(...) )
Dri ;)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

genial merci !!! :)
Répondre