Page 1 sur 1

Bug DLL

Publié : mer. 21/sept./2005 22:08
par Progi1984
Slt, petit bug que l'on a trouvé, enfin repeatuntil a trouvé !

D'abord compiler la dll

Code : Tout sélectionner

Global result.s

ProcedureDLL.s BKDB_GetResult()
  ProcedureReturn result
EndProcedure

ProcedureDLL BKDB_Init()
  result = ""
EndProcedure

ProcedureDLL BKDB_RunNoThread()
  result = "Yeah ! y'a un bug !"
EndProcedure
Puis utilisez ce code :

Code : Tout sélectionner

If OpenLibrary(0, "BKDB.DLL")

CallFunction(0,"BKDB_Init")

CallFunction(0,"BKDB_RunNoThread")
Repeat
  ia=ia+1
  resultat=CallFunction(0,"BKDB_GetResult")
  Debug Str(ia)+":"+Str(resultat)
Until False
EndIf
Normalement ca bugge à 4637 !!!!!

Publié : mer. 21/sept./2005 23:22
par LeCyb
Y'a aucun bug, tu ne peux pas faire un Global dans une dll.

"Le code d'une DLL est de même nature que le code PureBasic excepté qu'aucun code ne peut exister en dehors d'une procédure."

Publié : mer. 21/sept./2005 23:48
par nico
Il me semble que la déclaration des valeurs globales en dehors de toutes procédures est correct.

Le problème vient du fait que tu fais: Procedure.s

alors qu'il vaudrait mieux faire Procedure.l et renvoyer l'adresse de la chaine.

Bien que la valeur renvoyée soit la même, il n'y a pas de bug dans le second cas.

Tu essayes de renvoyer un type chaine, tu dois savoir que l'on ne peut pas procéder ainsi dans une DLL.

Publié : jeu. 22/sept./2005 1:14
par Backup
ok ! daccord !
mais dans ce cas pourquoi va t'il jusqu'a 4637 sans planter ? 8O

Publié : jeu. 22/sept./2005 6:52
par Progi1984
Dobro > Merci Dobro !

Nico, Lecyb > Pourriez vous dans ce cas m'aider à réousdre le problème ?

Publié : jeu. 22/sept./2005 8:14
par nico
Pour résoudre ton problème, je l'explique dans le post, faut juste lire. :roll:

Publié : lun. 26/sept./2005 9:23
par Progi1984
Désolé, nico, mais aprés un week end de recherche en tous sens, je n'ai pas réussi, donc si tu pouvais maider stp

Publié : lun. 26/sept./2005 11:25
par nico

Code : Tout sélectionner

ProcedureDLL.l BKDB_GetResult() 
  ProcedureReturn @result 
EndProcedure 

resultat=peeks(CallFunction(0,"BKDB_GetResult")) 

Publié : mar. 31/janv./2006 23:33
par Gratteur
Bah la je dis big bug dans votre dll BKDB qui la rend inutilisable dans un programme, c'est simple, essayez ce code (il se sert de la page php de test) et vous allez comprendre :

Code : Tout sélectionner

IncludeFile "BKDB_Inc.pb"
CallFunction(#BKDB_LIB, "BKDB_Initialise", "http://repeatuntil.free.fr/BKDB/")

flag = CallFunction(#BKDB_LIB, "BKDB_RunNoThread", "BKDB.php?opt=getValue")
state = CallFunction(#BKDB_LIB, "BKDB_GetState")
If state = #BKDB_FINISHED_OK
  Debug "Resultat avant : " + BKDB_GetResult("/")
EndIf

rand = Random(100)
Debug "Remplacer par : " + Str(rand)

flag = CallFunction(#BKDB_LIB, "BKDB_RunNoThread", "BKDB.php?opt=setValue&value=" + Str(rand))

flag = CallFunction(#BKDB_LIB, "BKDB_RunNoThread", "BKDB.php?opt=getValue")
state = CallFunction(#BKDB_LIB, "BKDB_GetState")
If state = #BKDB_FINISHED_OK
  Debug "Resultat après : " + BKDB_GetResult("/")
EndIf
Voila, vous l'avez compris si on execute une requete de lecture et qu'on modife des données, une autre lecture donnera toujours les résultats de la première requete.

Je suis décus ;p

Publié : mer. 01/févr./2006 7:16
par repeatuntil
Salut gratteur !! C'est marrant que tu ecrives aujourd'hui a propos de cette librairie : on vient justement de l'ameliorer a 2000% pour qu'elle soit BEAUCOUP plus fonctionnel, plus pratique, plus puissante ! Il nous faut encore 1-2 semaines avant de la sortir, pour paufiner le tout.
Bonne nouvelle, le bug que tu mentionnes est corrige dans la nouvelle version !!
Cette nouvelle version permettra de mettre tes requetes en queue et la lib fera tout pour toi... Plus de nouvelles bientot !

Publié : jeu. 02/févr./2006 19:02
par Gratteur
Je n'en doute pas, cette dll est très bien faite pour ceux qui veulent un accès via php et peut se révéler très pratique ;p.

Ceci dit je préfère quand même utiliser mon propre petit bout de code pour optimiser tout ça à ma façon.

Bon courage.