Page 1 sur 2
Import DLL dans Purebasic
Publié : lun. 09/mars/2020 17:32
par threedslider
Salut,
C'est possible à partir d'une DLL écrit en C++ peut importer dans Purebasic ? J'ai un fonction void qui affiche simple un texte genre hello. Comment Créer un exécutable en Purebasic chargeant la DLL ? Comment on écrit en quelques codes comme exemple ?
Merci votre aide sera bienvenue !
Re: Import DLL dans Purebasic
Publié : lun. 09/mars/2020 20:29
par Naheulf
C'est tout à fait possible. Je pense que tu devrait trouver ton bonheur dans l'aide de la bibliothèque "Library" intégrée à PureBasic ainsi que dans l'exemple fourni sur la page des "Prototypes"
Re: Import DLL dans Purebasic
Publié : lun. 09/mars/2020 21:53
par kernadec
bsr à tous
je ne code plus bcp en PB pour le moment..
mais pour une question sur les DLL, je connais un peu le sujet...
voici deux codes qui utilisent deux maniere pour envoyer des paramétres à une DLL
et recuperer les données calculées par celle-ci
en 2008 j'ai utilisé des prototypes, il y a deux codes dont le second fait a l arrache
qui utilise le mode globale pour les variables prototypes c'est une astuce de "User_Russian" du forum anglais
https://www.purebasic.fr/french/viewtop ... f=3&t=8459
dans cet autre code j'utilise la commande CallFunction()
https://www.purebasic.fr/french/viewtop ... =3&t=14026
j'oubliais,
j 'ai fais ca aussi pour avoir la listes de fonctions d'une DLL
https://www.purebasic.fr/french/viewtop ... =6&t=10202
j’espère que ces exemples pourront t'aider
Cordialement
Re: Import DLL dans Purebasic
Publié : jeu. 07/mai/2020 14:11
par kernadec
bjr à tous
l'autre jour j'avais omis de mentionner ce programme que j'utilise et en plus gratuit
il est très utile pour connaitre les paramètres des fonctions d'un fichiers dll
https://www.alternate-tools.com/pages/c ... p?lang=ENG
Cordialement
Re: Import DLL dans Purebasic
Publié : mer. 20/mai/2020 16:26
par threedslider
Merci à tous !
Désolééé pour le retard de la réponse.
Re: Import DLL dans Purebasic
Publié : ven. 21/août/2020 9:43
par threedslider
Ok je vais plus simple (hyper simple !) de comment cela marche la DLL dans Purebasic
Voici le code :
Code : Tout sélectionner
Procedure Function()
res=OpenLibrary(0,"test.dll")
If res
Calling = CallFunction(0, "SomeFunction")
CloseLibrary(0)
Else
MessageRequester("ERROR","Cant find DLL in Path",0):End
EndIf
EndProcedure
OpenConsole()
If Function()
PrintN("It is working !!")
Delay(5000)
EndIf
Ok tout là cela marche bien comme test mais comment afficher la fonction SomeFunction (c'est un void function) sans paramètre appelé par la DLL dans Purebasic?
Pourriez vous m'aider, svp ?
Le fichier DLL : ==>>
https://www.dropbox.com/s/s9cu3se9zq8wh71/test.dll?dl=0
Re: Import DLL dans Purebasic
Publié : ven. 21/août/2020 10:21
par venom
chez moi ta dll test ne renvoi aucune fonction.
Voici le code que j'utilise pour analyser une dll :
Code : Tout sélectionner
Enumeration
#Viewver
#Button_LoadDll
#ListIcon_dll
EndEnumeration
Procedure LoadDLL()
ClearGadgetItems( #ListIcon_dll )
Dll.s = OpenFileRequester ( "ouvrir une dll", "", "Dynamic link library (*.dll)|*.dll", 0)
If Dll <> ""
SetWindowTitle ( #Viewver, "open dll : " + GetFilePart (Dll))
OpenLibrary (0, Dll)
ExamineLibraryFunctions (0)
While NextLibraryFunction () <> 0
AddGadgetItem ( #ListIcon_dll, -1, LibraryFunctionName () + Chr (10) + Str ( LibraryFunctionAddress ()))
Wend
CloseLibrary (0)
EndIf
EndProcedure
If OpenWindow ( #Viewver, 0, 0, 600, 450, "open dll", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
ListIconGadget ( #ListIcon_dll, 10, 40, 580, 400, "nom de la fonction", 288, #PB_ListIcon_GridLines )
AddGadgetColumn ( #ListIcon_dll, 1, "Address", 288)
ButtonGadget ( #Button_LoadDll, 235, 10, 130, 20, "Ouvrir une dll" )
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #Button_LoadDll
LoadDLL()
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
Tu peux voir que rien n'apparait.
A compiler en 32 ou 64 bits en fonction de la dll bien sur.
@++
Re: Import DLL dans Purebasic
Publié : ven. 21/août/2020 10:36
par threedslider
Ma test.dll marche chez moi en 32 bits sauf que je ne sais pas comment afficher le print par la fonction SomeFunction()...
Ton code est très bien, elle affiche la fonction SomeFunction à l'adresse 1954549824... mais je veux moi afficher ma fonction dans purebasic, comment on fait cela ?
Re: Import DLL dans Purebasic
Publié : ven. 21/août/2020 10:50
par venom
Etrange, chez moi rien ne s'affiche dans ta dll
PB 5.72
@++
Re: Import DLL dans Purebasic
Publié : ven. 21/août/2020 11:00
par threedslider
ok oui c'est étrange donc j'ai compilé en exe, est ce cela marche chez toi pour voir ?
https://www.dropbox.com/s/8qx82i1ikkuwe ... l.zip?dl=0
Re: Import DLL dans Purebasic
Publié : ven. 21/août/2020 11:11
par venom
Non, chez moi ça reste vide. Tu essaye bien avec la Dll que tu as mis sur DropBox ?
@++
Re: Import DLL dans Purebasic
Publié : ven. 21/août/2020 11:18
par threedslider
Et ça ?
https://www.dropbox.com/s/9msaxq14w6w5dm5/test.zip?dl=0
J'ai compressé comme ça c'est l'original sans modification par externe...
Re: Import DLL dans Purebasic
Publié : ven. 21/août/2020 11:33
par threedslider
Sinon je mets tout, la DLL et la Lib ?
peut être c'est ça qui manque, non ?
https://www.dropbox.com/s/wccjmogo2zbi6 ... 2.zip?dl=0
Re: Import DLL dans Purebasic
Publié : ven. 21/août/2020 11:55
par venom
Non aucune fonction de retour.
Voici un code qui fait (je pense) ce que tu souhaite :
Code : Tout sélectionner
;{ Partie qui permet de creer la Dll
Global ReturnString$
ProcedureDLL.s MaFonction() ; nom de la fonction qu'on retrouvera dans la Dll
ReturnString$ = "Voici un texte dans une Dll !" ; texte que l'on souhaite recuperer
ProcedureReturn ReturnString$
EndProcedure
;}
;{ Partie qui te permet de lire ta Dll
If OpenLibrary(0, "Chemin vers la Dll que tu aura creer avec le code ci-dessus."); on ouvre la Dll via son chemin
String.s = PeekS(CallFunction(0, "MaFonction")); le nom de la fonction qui nous interesse dans la Dll (MaFonction). On fait appel a peeks pour lire une chaine de caractere en memoire
Debug String.s ; on affiche le résultat. ça peux etre dans un print ou autre.
CloseLibrary(0)
EndIf
;}
; ces 2 codes sont bien evidement a separer ;)
le premier code sert a creer la Dll. Et le second a lire le contenue. J'ai commenter au mieux.
Ps : chez moi c'est ok
EDIT : Voici un zip avec tout pour tester en mode console
@++
Re: Import DLL dans Purebasic
Publié : ven. 21/août/2020 14:10
par threedslider
Merci beaucoup ! ça marche nickel !
Effectivement c'est une autre façon de faire mais je doute que tu as compilé DLL dans purebasic, non ?
Moi j'ai compilé en Visual studio pour la DLL, certain marche pour plus simple mais quand c'est plus complexe d'autre pas du tout... :-/