Encore un problème avec les DLL...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
anissa
Messages : 136
Inscription : mer. 13/oct./2010 15:43

Encore un problème avec les DLL...

Message 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
ricou 94
Messages : 9
Inscription : dim. 24/oct./2010 16:11
Localisation : ABLON sur SEINE

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

Message 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 !
anissa
Messages : 136
Inscription : mer. 13/oct./2010 15:43

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

Message 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
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

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

Message 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
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Répondre