Page 1 sur 2
Import
Publié : sam. 11/juin/2016 17:01
par Shadow
Salut, j'ai regarder le tuto de micro sur comment faire une dll
mais ça ne fonctionne pas chez moi, ça dis que le point d'entrée
de la procédure est introuvable, blablabla...
Comment créer une dll et communiquer avec ?
Re: Import
Publié : sam. 11/juin/2016 17:24
par falsam
Faisant simple avec cette exemple qui va nous permettre de faire une addition.
■ Code de la DLL : MaDLL.pb
0 - Tu sauvegardes
1 - Option de compilation : Format de l'exécutable -> Share DLL
2 - Tu crées ton exécutable en lui donnant le nom de MaDLL.DLL (C'est un exemple)
■ Code pour appeler la DLL : TestMaDLL.pb
Code : Tout sélectionner
Enumeration
#MaDLL
EndEnumeration
If OpenLibrary(#MaDLL, "madll.dll")
Debug CallFunction(#MaDll, "Addition", 40, 20)
CloseLibrary(#MaDLL)
EndIf
Et bimmmMMmm ...... ça fonctionne ^^.
Re: Import
Publié : sam. 11/juin/2016 17:28
par Shadow
Super, merci Falsam
Par contre j'aurais voulue utiliser
"Import" plutôt, plus flexible

Re: Import
Publié : sam. 11/juin/2016 17:35
par falsam
Import avec une lib oui mais pas avec une DLL. (Sauf erreur ou omission de ma part)
Help a écrit :For advanced programmers. Import : EndImport allows to easy declare external functions and variables from a library (.lib) or an object (.obj) file.
Re: Import
Publié : sam. 11/juin/2016 17:50
par Shadow
Oui exacte Falsam c'est bien ça.
Et aussi comment partager des variable entre le programme Main et la Dll ?
Par exemple le Main appel une Dll qui a une fenêtre avec des champs
comment je retourne le contenue de ses champs au programme Main ?
Faut une variable, structure ?
Re: Import
Publié : sam. 11/juin/2016 18:04
par falsam
Si tu ne veux pas utiliser de fonctions comme CallFunction() dans ton code principale, tu peux créer un include qui contiendra des prototype de ta dll.
Exemple pour la fonction addition de la dll.
Code : Tout sélectionner
;// Ton include
Global MaDLL = OpenLibrary(#PB_Any, "madll.dll")
If MaDLL
Prototype.i ProtoAddition (x.i, y.i)
Addition.ProtoAddition = GetFunction(MaDLL, "Addition")
EndIf
;// Ton code principale
Debug Addition(2,3)
Re: Import
Publié : sam. 11/juin/2016 18:13
par falsam
Et parce que j'ai dit des bétises dans ma premiere réponse, je vais te répondre pour la solution avec la fonction Import()
Quand tu as crée MaDLL.Dll, lecompilateur génére aussi une lib. Donc la fonction import fonctionne.
Le code TestImportMaDLL.pb à sauvegarder dans le dossier contenant ta DLL.
Code : Tout sélectionner
Import "MaDLL.lib"
Addition(x.i, y.i)
EndImport
Debug Addition(2, 3)
Re: Import
Publié : sam. 11/juin/2016 18:21
par Shadow
Merci et pour les variables, la partage de donné ?
J'voudrait faire un programme à base de blugins avec des Dll.
Re: Import
Publié : sam. 11/juin/2016 18:26
par falsam
Commence par essayer de mettre ta fenêtre dans une DLL et d'essayer de l'ouvrir depuis un main tout en intégrant la boucle événementielle et poste un code simple. (si ça fonctionne)

Re: Import
Publié : sam. 11/juin/2016 18:38
par Shadow
C'est bon c'est fais ça

Mais je ne sais pas comment faire pour partager des données...
Re: Import
Publié : sam. 11/juin/2016 18:41
par falsam
falsam a écrit :et poste un code simple.
Il est ou le code ? ^^
Re: Import
Publié : sam. 11/juin/2016 18:47
par Shadow
J'voudrait faire un programme à base de blugins avec des Dll.
Il est en court, je commence juste !
Re: Import
Publié : sam. 11/juin/2016 18:57
par falsam
Alors un exemple sans savoir si c'est vraiment ça que tu veux.
■ Code de la dll contenant une fenetre ainsi que deux valeur à récupérer.
Code : Tout sélectionner
ProcedureDLL ShowWindow()
OpenWindow(0, 0, 0, 300, 300, "Fenetre de ma dll", #PB_Window_ScreenCentered)
StringGadget(0, 20, 20, 80, 22, "A récupérer 0")
StringGadget(1, 20, 50, 80, 22, "A récupérer 1")
EndProcedure
ProcedureDLL.s GetValue(Gadget.i)
ProcedureReturn GetGadgetText(Gadget)
EndProcedure
■ Code de ton main.
Code : Tout sélectionner
Import "MaDLL.lib"
ShowWindow()
GetValue(Gadget.i)
EndImport
OpenWindow(0, 0, 0, 500, 500, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ShowWindow() ;
Debug PeekS(GetValue(0))
Debug PeekS(GetValue(1))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Re: Import
Publié : sam. 11/juin/2016 19:46
par Shadow
Merci Falsam, ton exemple fonctionne.
Voici le début de mon programme, tu verra que ça marche pas comme j'ai fais.
C'est la première fois que je fais ça.
Merci de ton aide
http://www.aht.li/2908075/PureAssictance_V1.zip
Re: Import
Publié : sam. 11/juin/2016 21:16
par microdevweb
Salut Shadow,
Mon tuto était plutôt l'inverse créer une Dll à partir d'un module. Il suffis simplement dans le code de la Dll d'inclure le module (Xinclude) de créer une fonction dans la Dll pour chaque fonction déclarée public du module en appelant la dite fonction (du module) le compilateur se chargera de tous le reste.