Import

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Import

Message 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 ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Import

Message par falsam »

Faisant simple avec cette exemple qui va nous permettre de faire une addition.

■ Code de la DLL : MaDLL.pb

Code : Tout sélectionner

ProcedureDLL Addition(x,y)
  ProcedureReturn(x+y)
EndProcedure
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 ^^.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Import

Message par Shadow »

Super, merci Falsam :)

Par contre j'aurais voulue utiliser
"Import" plutôt, plus flexible :)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Import

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Import

Message 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 ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Import

Message 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)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Import

Message 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)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Import

Message par Shadow »

Merci et pour les variables, la partage de donné ?
J'voudrait faire un programme à base de blugins avec des Dll.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Import

Message 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) :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Import

Message par Shadow »

C'est bon c'est fais ça ;)
Mais je ne sais pas comment faire pour partager des données...
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Import

Message par falsam »

falsam a écrit :et poste un code simple.
Il est ou le code ? ^^
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Import

Message par Shadow »

J'voudrait faire un programme à base de blugins avec des Dll.
Il est en court, je commence juste !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Import

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Import

Message 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
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Import

Message 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.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre