Invalid memory access

Sujets variés concernant le développement en PureBasic
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Invalid memory access

Message par wolfjeremy »

Salut,

J'ai une erreur du compilateur "Invalid memory access" quand j'esseye de faire marcher mon code sql... (sur l'autre que j'avais fait j'avais pas sa pourtant c'est presque le meme :? )

Voila la ligne qui pose problème :

Code : Tout sélectionner

If CallFunctionFast(real_query, dbHnd, SQL$, Len(SQL$))
Si je fait un debug de real_query, j'ai pourtant une adresse memoire :

Code : Tout sélectionner

268461888
Pouvez vous m'aider ?

Merci d'avance pour votre aide.
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Ce n'est pas parce que tu as une adresse que tout est ok, en général, ça arrive si on appel pas comme il faut la fonction (param invalide) ou parce que la fonction appelée n'a pas réussi à faire ce qu'elle doit faire justement à cause de mauvais params.
Ca peut aussi être un problème de convention d'appel, essaye avec CallCFunctionFast.
"Qui baise trop bouffe un poil." P. Desproges
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Marche pas non plus avec CallC...

Voila une partie de mon code :


Enumeration
#libmysql
#Erreur
#Verif_ok
#Not_actif
#Acces_ok
EndEnumeration

If OpenLibrary ( #libmysql , "libmySQL.dll" ) ;charger la dll et choper l'adresse des fonctions
Global init = GetFunction( #libmysql , "mysql_init" )
Global close = GetFunction( #libmysql , "mysql_close" )
Global list_tables = GetFunction( #libmysql , "mysql_list_tables" )
Global real_connect=GetFunction( #libmysql , "mysql_real_connect" )
Global num_rows=GetFunction( #libmysql , "mysql_num_rows" )
Global fetch_row=GetFunction( #libmysql , "mysql_fetch_row" )
Global free_result=GetFunction( #libmysql , "mysql_free_result" )
Global query = GetFunction( #libmysql , "mysql_query" )
Global store_result = GetFunction( #libmysql , "mysql_store_result" )
Global real_query = GetFunction( #libmysql , "mysql_real_query" )
Global field_count = GetFunction( #libmysql , "mysql_field_count" )
Global affected_rows = GetFunction( #libmysql , "mysql_affected_rows" )
Global num_fields = GetFunction( #libmysql , "mysql_num_fields" )
Global num_rows = GetFunction( #libmysql , "mysql_num_rows" )
Global fetch_row = GetFunction( #libmysql , "mysql_fetch_row" )
Global fetch_lengths = GetFunction( #libmysql , "mysql_fetch_lengths" )

dbHnd = CallCFunctionFast (init,0)

If dbHnd = 0
MessageRequester ( "Erreur" , "Impossible d'initialiser la connection" , #PB_MessageRequester_Ok )
End
EndIf
Else
MessageRequester ( "Erreur" , "Impossible de charger libmysql.dll" , #PB_MessageRequester_Ok )
End
EndIf

; Entrez les infos sur votre base sql
IPsql$ = "127.0.0.1"
user$ = "root"
pass$ = ""
portsql =0
pipe$ = ""
conconf =0

;connection a la base de donnée
CallFunctionFast (real_connect,dbHnd, IPsql$, user$, pass$, "ssa" , portsql, pipe$, conconf)

Procedure client_verif(site$, login$, pass$, pcname$)

;initialisation de la requete
SQL$ = "SELECT ID, actif$, site$, pseudo$, pass$, pcname$ FROM secu WHERE site = '" + site$ + "' AND login = '" + login$ + "' AND pass = '" + pass$ + "' AND pcname = '" + pcname$ + "'"
Debug real_query
If CallFunctionFast (real_query, dbHnd, SQL$, Len (SQL$)) ;note c'est un peu bizzare, mais real_query renvoie 0 QUAND ELLE MARCHE et des infos QUAND ELLE NE MARCHE PAS. Je suis resté bloqué comme un con à cause de ca xD

ProcedureReturn #Erreur

Else

*mysqlResult= CallFunctionFast (store_result,dbHnd)
If *mysqlResult=0
If CallFunctionFast (field_count,dbHnd)
ProcedureReturn #Erreur
Else
EndIf
Else
affRows = CallFunctionFast (affected_rows,dbHnd)
*mysqlRow= CallFunctionFast (fetch_row,*mysqlResult)
*mysqlLen= CallFunctionFast (fetch_lengths,*mysqlResult)

length= PeekL (*mysqlLen+4*(0))
fieldptr= PeekL (*mysqlRow+4*(0))
If PeekS (fieldptr,length) = "1"
ProcedureReturn #Verif_ok
Else
ProcedureReturn #Not_actif
EndIf

EndIf

EndIf

EndProcedure
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

A part que je ne comprend pas pourquoi tu utilises CallCFunctionFast pour l'init et CallFunctionFast pour les autres fonctions, je ne vois pas d'erreur particulière.
Check le retour de real_connect histoire d'être sûr que tout s'est bien passé.
"Qui baise trop bouffe un poil." P. Desproges
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

J'ai oublier d'enlever le C mais normalement j'utilise CallFunctionFast lol

EDIT : apparement c'est un problème avec real_connect, tu a bien vu :wink: je vais chercher le prob. Surement ouvrir un port.
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Bon ben j'ai ouvert le port 3306 et je passe par l'ip "127.0.0.1:3306" et real_connect n'a plus de problème, par contre sa marche toujour pas toujour le problème d'invalid error access :x
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

J'ai vu comment fonctionne mysql_real_connect et cette fonction à besoin de l'adresse d'une variable pour y stocker la structure MYSQL, peut être que vu que tu ne passais pas l'adresse, ça fait foirer le reste des fonction mysql.

Code : Tout sélectionner

CallFunctionFast   (real_connect,@dbHnd, IPsql$, user$, pass$,   "ssa"   , portsql, pipe$, conconf) 
"Qui baise trop bouffe un poil." P. Desproges
Répondre