Page 1 sur 1

Probleme de DLL

Publié : lun. 03/janv./2005 19:22
par Aranoth
Tout d'abord, bonne année à tous ! :wink:



Voici mon problème:


J'ai une DLL contenant une fonction

Code : Tout sélectionner

ProcedureDLL A_Debug(string$)
  MessageRequester("Debugger",string$)
EndProcedure
Puis j'ai un fichier PB qui propose un fonction dont le but est de servir de "wrapper" à la DLL

Code : Tout sélectionner

dll = OpenLibrary(-1,"DLL\alib.dll")
If dll = 0
  MessageRequester("Erreur","Impossible de charger alib.dll")
  End
EndIf

Procedure A_Debug(msg$)
  CallFunction(dll,"A_Debug",msg$)
EndProcedure

Et enfin mon fichier PB classique:

Code : Tout sélectionner

IncludeFile "ALib.pb"

A_Debug("ok")

;CallFunction(dll,"A_Debug","yo")


CloseLibrary(dll)
End
La ligne en commentaire marche très bien...
Alors que comme ca, j'ai le droit à:
Le programme a rencontré une erreur et blabla...doit fermer
Erreur dans <inconnu>


Si quelqu'un a une idée ? :P

Merci :wink:

Publié : lun. 03/janv./2005 19:47
par nico
J'ai rien compris, mais ton closelibrary, tu devrais le mettre avec openlibrary.

Publié : lun. 03/janv./2005 19:51
par Aranoth
Ok je recommence :lol:


DLL contenant une fonction A_Debug --> fichier PB contenant une autre A_Debug, qui appelle la fonction du meme nom de la DLL --> utilisation de A_Debug


C'est en fait pour éviter de devoir écrire CallFunction(), tu comprends mieux là ? :wink:

Publié : lun. 03/janv./2005 20:37
par nico
Je ne comprenais pas parce que l'exemple que tu donnes ne correspond pas à ce que tu cherches à faire où c'est imcomplet, en tout cas je ne comprends toujours pas le problème.



:roll:

Publié : lun. 03/janv./2005 21:27
par Le Soldat Inconnu
mets donc ta variable "dll" en global :wink:
et tu veras que ça ira mieux car sinon, la variable dll de la procedure vaut 0

Publié : lun. 03/janv./2005 21:31
par Aranoth
...

t'a raison en plus....


bon je vais aller me coucher lol..



quel abrutis je fait :?


Merci tu m'évite de perdre encore de nombreuses heures :P

Publié : lun. 03/janv./2005 21:54
par nico
Pourquoi tu ne mets pas tout dans ta procédure, comme ça tu n'as pas besoin de globale?

Code : Tout sélectionner

Procedure A_Debug(msg$) 
dll = OpenLibrary(-1,"DLL\alib.dll") 
If dll = 0 
  MessageRequester("Erreur","Impossible de charger alib.dll") 
  Else
  CallFunction(dll,"A_Debug",msg$) 
CloseLibrary(dll) 
EndIf 
EndProcedure 

Publié : lun. 03/janv./2005 22:05
par Aranoth
parce que je vous ai montré qu'un extrait,
il y a beaucoup plus de fonctions (acutellement 15)


J'ai encore une question cependant, j'ai vu sur certains codes l'utilisation de ProcedureCDLL plutot que ProcedureDLL...quelle est la différence ?
Merci

Publié : lun. 03/janv./2005 22:08
par KarLKoX
ProcedureCDLL pour les fonctions exportées en _cdecl (Linux par exemple).

Publié : lun. 03/janv./2005 22:09
par Aranoth
Ah ok, merci.

je vais me contenter de ProcedureDLL^^


Merci à tous :wink: