PureBasic

Forums PureBasic
Nous sommes le Mar 19/Jan/2021 16:51

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 18 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: Import DLL dans Purebasic
MessagePosté: Lun 09/Mar/2020 17:32 
Hors ligne

Inscription: Dim 01/Juil/2018 22:38
Messages: 53
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 !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Lun 09/Mar/2020 20:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 10/Mar/2013 22:22
Messages: 171
Localisation: France
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" ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Lun 09/Mar/2020 21:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 25/Avr/2008 11:14
Messages: 1447
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/viewtopic.php?f=3&t=8459

dans cet autre code j'utilise la commande CallFunction()

https://www.purebasic.fr/french/viewtopic.php?f=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/viewtopic.php?f=6&t=10202

j’espère que ces exemples pourront t'aider

Cordialement


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Jeu 07/Mai/2020 14:11 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 25/Avr/2008 11:14
Messages: 1447
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_dllanalyzer.php?lang=ENG

Cordialement


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Mer 20/Mai/2020 16:26 
Hors ligne

Inscription: Dim 01/Juil/2018 22:38
Messages: 53
Merci à tous !

Désolééé pour le retard de la réponse.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Ven 21/Aoû/2020 9:43 
Hors ligne

Inscription: Dim 01/Juil/2018 22:38
Messages: 53
Ok je vais plus simple (hyper simple !) de comment cela marche la DLL dans Purebasic :)

Voici le code :

Code:
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Ven 21/Aoû/2020 10:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2948
Localisation: Klyntar
chez moi ta dll test ne renvoi aucune fonction. :?
Voici le code que j'utilise pour analyser une dll :
Code:
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Ven 21/Aoû/2020 10:36 
Hors ligne

Inscription: Dim 01/Juil/2018 22:38
Messages: 53
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 ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Ven 21/Aoû/2020 10:50 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2948
Localisation: Klyntar
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Ven 21/Aoû/2020 11:00 
Hors ligne

Inscription: Dim 01/Juil/2018 22:38
Messages: 53
ok oui c'est étrange donc j'ai compilé en exe, est ce cela marche chez toi pour voir ?

https://www.dropbox.com/s/8qx82i1ikkuwe6p/load_dll.zip?dl=0


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Ven 21/Aoû/2020 11:11 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2948
Localisation: Klyntar
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Ven 21/Aoû/2020 11:18 
Hors ligne

Inscription: Dim 01/Juil/2018 22:38
Messages: 53
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...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Ven 21/Aoû/2020 11:33 
Hors ligne

Inscription: Dim 01/Juil/2018 22:38
Messages: 53
Sinon je mets tout, la DLL et la Lib ?

peut être c'est ça qui manque, non ?

https://www.dropbox.com/s/wccjmogo2zbi6zo/test2.zip?dl=0


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Ven 21/Aoû/2020 11:55 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2948
Localisation: Klyntar
Non aucune fonction de retour.

Voici un code qui fait (je pense) ce que tu souhaite :
Code:
;{ 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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Import DLL dans Purebasic
MessagePosté: Ven 21/Aoû/2020 14:10 
Hors ligne

Inscription: Dim 01/Juil/2018 22:38
Messages: 53
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... :-/


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 18 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 13 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye