Bug DLL

Archive.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Bug DLL

Message 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 !!!!!
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message 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."
Vive le thread-safe !
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ok ! daccord !
mais dans ce cas pourquoi va t'il jusqu'a 4637 sans planter ? 8O
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Dobro > Merci Dobro !

Nico, Lecyb > Pourriez vous dans ce cas m'aider à réousdre le problème ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Pour résoudre ton problème, je l'explique dans le post, faut juste lire. :roll:
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Code : Tout sélectionner

ProcedureDLL.l BKDB_GetResult() 
  ProcedureReturn @result 
EndProcedure 

resultat=peeks(CallFunction(0,"BKDB_GetResult")) 
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message 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
repeatuntil
Messages : 7
Inscription : mer. 21/sept./2005 21:20

Message 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 !
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message 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.
Répondre