Import DLL dans Purebasic

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
threedslider
Messages : 381
Inscription : dim. 01/juil./2018 22:38

Import DLL dans Purebasic

Message 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 !
Avatar de l’utilisateur
Naheulf
Messages : 191
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Import DLL dans Purebasic

Message 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" ;)
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Import DLL dans Purebasic

Message 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, :wink: 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
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Import DLL dans Purebasic

Message 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
Avatar de l’utilisateur
threedslider
Messages : 381
Inscription : dim. 01/juil./2018 22:38

Re: Import DLL dans Purebasic

Message par threedslider »

Merci à tous !

Désolééé pour le retard de la réponse.
Avatar de l’utilisateur
threedslider
Messages : 381
Inscription : dim. 01/juil./2018 22:38

Re: Import DLL dans Purebasic

Message 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
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Import DLL dans Purebasic

Message 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. :wink:
A compiler en 32 ou 64 bits en fonction de la dll bien sur.





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
threedslider
Messages : 381
Inscription : dim. 01/juil./2018 22:38

Re: Import DLL dans Purebasic

Message 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 ?
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Import DLL dans Purebasic

Message par venom »

Etrange, chez moi rien ne s'affiche dans ta dll 8O
PB 5.72






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
threedslider
Messages : 381
Inscription : dim. 01/juil./2018 22:38

Re: Import DLL dans Purebasic

Message 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
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Import DLL dans Purebasic

Message par venom »

Non, chez moi ça reste vide. Tu essaye bien avec la Dll que tu as mis sur DropBox ?






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
threedslider
Messages : 381
Inscription : dim. 01/juil./2018 22:38

Re: Import DLL dans Purebasic

Message 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...
Avatar de l’utilisateur
threedslider
Messages : 381
Inscription : dim. 01/juil./2018 22:38

Re: Import DLL dans Purebasic

Message 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
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Import DLL dans Purebasic

Message 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 :wink:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
threedslider
Messages : 381
Inscription : dim. 01/juil./2018 22:38

Re: Import DLL dans Purebasic

Message 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... :-/
Répondre