Passage tableau de string par son adresse [resolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Passage tableau de string par son adresse [resolu]

Message par Kwai chang caine »

Bonjour la famille :D

Alors voila, comme dab KCC il est parti dans une galere sans nom :?

Toujours dans son combat pour l'accouplement et l'elevage de petits PVB (Enfants de PB et de VB :lol:), je voudrais passer un tableau sous ce format.

Bon alors, je sais que vous allez me dire, que y'a plein de methode plus simple, depuis la 4.30 on peut passer l'array complet, ou encore autre chose.....
Mais moi, j'ai absolument besoin que ce soit sous cette forme, car j'ai déja passer 15 jours a rechercher un code pour passer un tableau de VB à PB et maintenant que ce code y marche pour VB, j'arrive pas a faire son equivalent en PB ...si c'est pas un monde ça :?

Je vous explique quand meme l'idée
Donc sans changer la forme du code, le voudrais avoir dans l'element "0" la longueur du tableau et dans les autres les adresses de chaques strings du dit tableau de string.

Mais la ça plante
Je doit encore me foutre dedans avec les adresses :cry:

Code : Tout sélectionner

Procedure Demande(*AdresseTablo)
 
 Dim Info.l(1)
 SizeOfArray.l = PeekL(*AdresseTablo)
 ReDim Info(SizeOfArray)
 CopyMemory(*AdresseTablo + 4, @Info(), SizeOfArray * 4)
 Debug Info(1)
 Debug Info(2)
 Debug Info(3)
 Debug PeekS(Info(1))
 Debug PeekS(Info(2))
 Debug PeekS(Info(3))
 
EndProcedure 

Longueur = 10
Dim Kcc.s(Longueur)
Kcc(0) = " "
PokeL(@Kcc(0), Longueur)
Kcc(1) = "Coucou"
Kcc(2) = "me"
Kcc(3) = "revoilou"

Demande(@Kcc(0))
Bonne journée
Dernière modification par Kwai chang caine le mer. 17/juin/2009 16:05, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Sans parler des quelques bugs (poke d'un long n'importe où par exemple...), il existe la commande arraysize() qui pourrait te venir en aide.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour DJES :D

J'ai pensé que ce pouvait etre lui qui merdoie, car ce doit etre dans les premieres fois que j'ai un "POKE" dans mon code, d'habitude je les ai tous sur ma voiture :D
Mais meme en l'enlevant c'est "kifkif bourique" :cry:

Code : Tout sélectionner

Procedure Demande(*AdresseTablo)
 
 SizeOfArray = 10
 Dim Info.l(SizeOfArray)
 CopyMemory(*AdresseTablo + 4, @Info(), SizeOfArray * 4)
 Debug Info(1)
 Debug Info(2)
 Debug Info(3)
 Debug PeekS(Info(1))
 Debug PeekS(Info(2))
 Debug PeekS(Info(3))
 
EndProcedure 

Dim Kcc.s(10)
Kcc(0) = " "
Kcc(1) = "Coucou"
Kcc(2) = "me"
Kcc(3) = "revoilou"

Demande(@Kcc(0))
C'est peut etre encore pas possible, ce que je demande :roll:

Bon pour l'arraysize, je l'ai mis :D

Code : Tout sélectionner

Procedure Demande(*AdresseTablo)
 
 Dim Info.l(10)
 SizeOfArray.l = PeekL(*AdresseTablo)
 ReDim Info(SizeOfArray)
 CopyMemory(*AdresseTablo + 4, @Info(), SizeOfArray * 4)
 Debug Info(1)
 Debug Info(2)
 Debug Info(3)
 Debug PeekS(Info(1))
 Debug PeekS(Info(2))
 Debug PeekS(Info(3))
 
EndProcedure 

Dim Kcc.s(10)
Kcc(0) = " "
PokeL(@Kcc(0), ArraySize(Kcc()))
Kcc(1) = "Coucou"
Kcc(2) = "me"
Kcc(3) = "revoilou"

Demande(@Kcc(0))
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

En fait ta procédure demande est là pour vérifier que tout se passe bien, c'est ça?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Non non, ma procedure demande est la, pour lire un tableau de long correspondant aux adresses des elements du tableau de string correspondant.

Avec VB il envoie ces adresses avec l'instruction "StrPtr()"

Code : Tout sélectionner

Info(0) = arraysize de  Kcc.s()
Info(1) = Adresse de Kcc.s(1)
Info(2) = Adresse de Kcc.s(2)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Tiens! T'as rien vu, rien entendu, OK? 8)

Code : Tout sélectionner

Procedure Demande(*AdresseTablo)
 
 taille=PeekL(*AdresseTablo)
 Dim Info.s(taille)
 For i=0 To taille
  info(i)=""
 Next i

 CopyMemory(*AdresseTablo , @Info(), (taille * 4))

 Debug Info(1)
 Debug Info(2)
 Debug Info(3)
 
EndProcedure

Dim Kcc.s(10)
Kcc(0) = ""
PokeL(@kcc(),ArraySize(kcc()))
Kcc(1) = "Coucou"
Kcc(2) = "me"
Kcc(3) = "revoilou"

Demande(@Kcc())
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Ouaaaahh !!!! ca marche, t'es un ange, merci 8)

Mais y'a un truc que je n'ai pas compris (etonnant non ??? :oops:), voir meme 2 pour etre plus precis

1/ Kcc() ce n'est pas la meme adresse que Kcc(0) ????

Je croyais que KCC(0) etait l'adresse du debut de tableau ??
J'avais encore tout pas bon ???? :roll:

2/ Et l'autre chose c'est que quand tu envoie a PB

Code : Tout sélectionner

Demande(@Kcc())
Ce n'est pas comme si tu envoyais un tableau des pointeurs du tableau dynamique de string ???
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Ah ouaiiihh !!!
Je viens de voir que @Kcc() <> @Kcc(0)

Tout simplement en faisant ça :

Code : Tout sélectionner

Debug @Kcc() 
Debug @Kcc(0) 
Alors la.....ça m'trou le ..........................................................................................................................................moral :D
Je viens de faire 15 jours à me casser la minette dans des codes de ouf avec les BSTR, l'UNICODE et tout le bastringue, dont d'ailleur j'en ai pas compris la moitié :oops:

Et je n'avais pas vu que @Kcc() <> @Kcc(0) :oops:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Ou la la ...ça se bouscule dans le bro qui me sert de tete :?

J'ai pas tout compris.....mais je viens de pondre ce "zeu" qui me montre bien la difference entre l'adresse tableau et son premier enregistrement

Code : Tout sélectionner

Procedure Demande(*AdresseTablo) 
  
 taille=PeekL(*AdresseTablo)
  
 Dim Info.s(taille) 
 
 CopyMemory(*AdresseTablo , @Info(), (taille * 4)) 
 
 Debug @Info()
 Debug @Info(0)
 Debug Info(1) 
 Debug Info(2) 
 Debug Info(3) 
  
EndProcedure 

Dim Kcc.s(10) 
PokeL(@kcc(),ArraySize(kcc())) 
Kcc(1) = "Coucou" 
Kcc(2) = "me" 
Kcc(3) = "revoilou" 

Demande(@Kcc())
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bon....plus je reflechis et plus "j'comprend moins bien" :cry:

Cette adresse PokeL(@kcc(), ...) on a le droit d'ecrire dedans comme tu viens de faire ????
Elle est pas comme les toilettes à chaque fois que je veux y aller................... occupée ?????

C'est drolement de la bidouille d'aller ecrire dedans.....il va pas m'en vouloir mon PC d'aller fouiller dans ses petites culottes ????
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Si :)

*Kcc() renvoie vers un tableau de pointeurs (*kcc(0), *kcc(1), etc...)
*Kcc(0) pointe vers le 1er élément
*kcc(1) 2nd

Bien sûr, aller poker dans les pointeurs n'est pas une très bonne idée, puisque tu vas sûrement empêcher la désallocation mémoire quand elle sera demandée par PB. Mais rien ne t'empêche de restaurer avant les dégâts que tu auras fait.
En outre, Windows doit sûrement libérer automatiquement toute la mémoire allouée par ton programme lorsque celui-ci se termine.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bon d'accord..... en fin de compte si j'ai bien compris, j'suis "TOCKé" de "POKER" :lol:

KCC y ferais donc un bon createur de virus.......et peut etre bien le meilleur car il a aucune idée de l'antidote :D
Meme sous la torture y dirait rien :D

Quand tu met *Kcc(0) tu veut dire l'adresse de la variable Kcc(0) ???
Alors pourquoi tu l'ecris pas @Kcc(0) ???

Et encore autre chose.....super géniale ton idée de restaurer le bordel que j'ai foutu, je vais le faire tout de suite :D

=
=
=
=
=
=

Ah j'ai oublié un minuscule petit détail.................comment on fait :oops:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Quand je mets *kcc(0), ça veut dire le contenu de ce qu'il y a à cette adresse, c'est comme si je disais peekl(@kcc(0))

(désolé, l'habitude)

Pour restaurer, devine! Tu sauvegardes le truc que tu vas poker :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

D'accord, parce que c'est pas super simple ces histoires de pointeur de PEEK et PEEK et colegrame :?

Merci beaucoup de toute ta precieuse aide. 8)

Je commence un peu à y voir clair
Enfin comme un lundi matin au reveil ...hein !!! :lol:

Je te souhaite une excelente journée
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Merci, toi aussi
Répondre