Page 1 sur 1

Encore un problème avec les DLL...

Publié : jeu. 30/déc./2010 12:52
par anissa
Bonjour et bonne année à tous

J'ai un problème bizarre: un programme appelant une DLL qui marche quand il est seul mais ne marche pas quand je l'ajoute dans un fichier inclus. Je m'explique:

J'ai un fichier Pb qui contient les déclarations des constantes ainsi que quelques procédures que je place toujours au début de mes codes sources (c'est donc un fichier inclus dans tous mes codes)

Code : Tout sélectionner

IncludeFile("Fcommun.Pb")
J'ai créé une DLL que je dois consulter une fois au niveau de chaque code source. Cette DLL doit me retourner 1 valeur.

Code : Tout sélectionner

ProcedureDLL.s GetValeur(a$)
;c'est seulement un exemple...
Val$=a$ + "Dobro"
ProcedureReturn Val$
EndProcedure
Code appelant la DLL:

Code : Tout sélectionner

If OpenLibrary(0, "MaDLL.dll")
   Val$=Peeks(CallFunction(0, "GetValeur",""))
   CloseLibrary(0)
   Debug "Val$= " + Val$
EndIf

Si j'exécute le programme Appelant la DLL(tout seul) ça marche bien, mais si je l'inclus dans (FCmmun.Pb), ça ne mache plus...

J'ai essayé de prévoir les cas des formats (unicode etc) en ajoutant les #Pb_Ascii etc... mais non, ça ne marche pas..

Pourtant le code seul marche bien (Val$ existe déclarée en global)

Si quelq'un a une idée...

Merci

Re: Encore un problème avec les DLL...

Publié : ven. 31/déc./2010 15:46
par ricou 94
anissa a écrit :Bonjour et bonne année à tous

J'ai un problème bizarre: un programme appelant une DLL qui marche quand il est seul mais ne marche pas quand je l'ajoute dans un fichier inclus. Je m'explique:

J'ai un fichier Pb qui contient les déclarations des constantes ainsi que quelques procédures que je place toujours au début de mes codes sources (c'est donc un fichier inclus dans tous mes codes)

Code : Tout sélectionner

IncludeFile("Fcommun.Pb")
J'ai créé une DLL que je dois consulter une fois au niveau de chaque code source. Cette DLL doit me retourner 1 valeur.

Code : Tout sélectionner

ProcedureDLL.s GetValeur(a$)
;c'est seulement un exemple...
Val$=a$ + "Dobro"
ProcedureReturn Val$
EndProcedure
Code appelant la DLL:

Code : Tout sélectionner

If OpenLibrary(0, "MaDLL.dll")
   Val$=Peeks(CallFunction(0, "GetValeur",""))
   CloseLibrary(0)
   Debug "Val$= " + Val$
EndIf

Si j'exécute le programme Appelant la DLL(tout seul) ça marche bien, mais si je l'inclus dans (FCmmun.Pb), ça ne mache plus...

J'ai essayé de prévoir les cas des formats (unicode etc) en ajoutant les #Pb_Ascii etc... mais non, ça ne marche pas..

Pourtant le code seul marche bien (Val$ existe déclarée en global)

Si quelq'un a une idée...

Merci
Bonjour Anissa !
Je pense que ton problème ne vient pas de la dll, ni de la façon de l'appeler, mais du fichier inclus.
En effet, tout les fichiers inclus en purebasic, portent l'extension : ".pbi".
Ton programme principal devrait donc commencer par la ligne suivante :

Code : Tout sélectionner

xincludefile ("fcommun.pbi")
En espérant avoir apporté une sollution à ton problème, je te sohaite également de bonnes fêtes de fin d'années !

Re: Encore un problème avec les DLL...

Publié : ven. 31/déc./2010 16:02
par anissa
Bonjour

Je n'ai pas encore changé l'extension de l'include mais, tout le contenu de mon fichier inclus marche bien malgré l'extension .pb. Toutes les instructions internes au fichier inclus sont prises en considération. Alors je ne sais pas s'il y a un rapport mais je vais essayer quand même.

Je vous tiendrais au courant des résultats

Merci encore

Anissa

Re: Encore un problème avec les DLL...

Publié : ven. 31/déc./2010 18:10
par GeBonet
Bonjour,

L'extension n'a absolument rien à voir.. ".pb" ou ".pbi" c'est quif-quif... C'est une convention !

Par contre quand on appelle une procédure d'une DLL c'est effectivement
par CallFunction(0, "GetValeur","") qu'on le fait et en ayant ouvert la DLL...
Donc dans ton cas ça marche...

Tandis que si la "DLL" fait partie du corps du programme ce n'est en fait qu'une "simple" procédure sans plus qui s'appelle donc comme une procédure...
soit ici :=> machin=GetValeur(a$) ou toute autre forme qui demande un retour... (Peek? etc...)

Voilà, j'espère que j'ai été "simple" :wink:
Bonne fête de fin d'année. :D