recherche d'une fonction dans une DLL

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

recherche d'une fonction dans une DLL

Message par minirop »

bonjour,
je suis entrain d'essayer de faire un menu "pluginable", mais le problème c'est que "GetFunction" renvoie toujours 0.

Code : Tout sélectionner

        If(OpenLibrary(#lib, "plugins/"+DirectoryEntryName(#dossier)))
          If(GetFunction(#lib, "GetPluginName")) ; si je mets "PurePlugin" çà ne marche pas non plus.
            ;pwet !
          Else
            MessageRequester("error","Ceci n'est pas un plugin")
          EndIf
Les plugins ont ces fonction :

Code : Tout sélectionner

Procedure.l PurePlugin()
  ProcedureReturn 1
EndProcedure

Procedure.s GetPluginName()
  ProcedureReturn "Plugin One"
EndProcedure
à chaque fois j'ai "ceci n'est pas un plugin", alors que je suis sur que les DLL on bien cette fonction.

merci.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Juste comme ça, j'ai l'impression qu'il y a des parenthèses en trop.
Essaye de cette façon :

Code : Tout sélectionner

If OpenLibrary(#lib, "plugins/"+DirectoryEntryName(#dossier)) 
          If GetFunction(#lib, "GetPluginName") ; si je mets "PurePlugin" çà ne marche pas non plus. 
            ;pwet ! 
          Else 
            MessageRequester("error","Ceci n'est pas un plugin") 
          EndIf
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Code utilisé pour créer la Dll

Code : Tout sélectionner

ProcedureDLL.l PurePlugin()
  ProcedureReturn 1
EndProcedure

ProcedureDLL.s GetPluginName()
  ProcedureReturn "Plugin One"
EndProcedure 
Code pour tester la Dll

Code : Tout sélectionner

#Lib=0
If OpenLibrary(#lib, "plugin.dll")
  Resultat = GetFunction(#lib, "GetPluginName") 
  If Resultat
    Debug PeekS(CallFunctionFast(Resultat))
  Else
    MessageRequester("error","Ceci n'est pas un plugin")
  EndIf 
EndIf  
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tu peux aussi utiliser les 'Prototype'

Code utilisé pour créer la Dll

Code : Tout sélectionner

ProcedureDLL.l PurePlugin(a.l,b.l)
  ProcedureReturn (a+b)
EndProcedure

ProcedureDLL.s GetPluginName(Texte.s)
  ProcedureReturn Texte + " Plugin One"
EndProcedure 
Code pour le test

Code : Tout sélectionner

;-- A placer dans un fichier include" ou utiliser Tailbite pour en faire une lib utilisateur

#Lib=0
Prototype GetPluginNameProc(Texte.s)
Prototype PurePluginProc(a.l,b.l)
Global GetPluginName.GetPluginNameProc
Global PurePlugin.PurePluginProc

Procedure InitPlugIn()
  If OpenLibrary(#lib, "plugin.dll")
    GetPluginName = GetFunction(#lib, "GetPluginName")
    PurePlugin = GetFunction(#lib, "PurePlugin")
    ProcedureReturn #True
  Else
    ProcedureReturn #False  
  EndIf 
EndProcedure

;-- Le programme débute ici"
;XincludeFile "PlugIn.pbi"

If InitPlugIn()
  Debug PeekS(GetPluginName("Bonjour"))
  Debug PurePlugin(3,9)
EndIf
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

en mettant ProcedureDLL, çà marche.
merci Comtois (mais je ne le suis pas :lol: )
Répondre