non mais si j'ai bien compris les posts de BlendMan, ce qu'il veux faire, c'est gérer plusieurs listes différentes avec un seul pointeur
du genre :
Code : Tout sélectionner
NewList Test()
AddElement(Test())
Test() = 50
NewList AutreTest()
AddElement(AutreTest())
AutreTest() = 25
AddElement(AutreTest())
AutreTest() = 12
Define *pointeur.Long
a = #True
If a = #True
*pointeur = @Test()
Else
*pointeur = @AutreTest()
EndIf
Debug ListSize(*pointeur)
Ça ne marchera pas car le paramètre attendu est une liste.
Le seul moyen d'accéder à des propriétés de liste à partir de l'adresse d'un élément de la liste est de lire la mémoire la ou sont stockées les infos de la liste.
Mais c'est foireux car bien sur, on a pas les spécif de PB pour ses listes !!
Hier j'ai cherché à trouver ou sont stockés les 1er, dernier élément ainsi que l'élément courant, ça se trouve, mais on ne peux pas les modifier sans risque de problème dans le fonctionnement de la liste.
Pour ce que tu veux faire BlendMan, je te conseille de choisir une autre méthode. Je ne sais pas trop comment tu gère ton système derrière le bout de code que tu nous a montré, mais si tu peux parcourir les éléments un à un (si il n'y en a pas trop) tu peux tout mettre dans la même liste par exemple, et avec une structure, tu met un champ de structure pour le type de l'élément.
Ce que tu seras obligé de faire, c'est de diviser ton code en 2 partie, une pour chaque type (pour chaque liste)
sinon voila des macro qui ne servent pas bien à grand chose :
Code : Tout sélectionner
#OFFSET_DATA = - 3 * SizeOf(Integer)
#OFFSET_ADRESSESTOCKEE = - 2 * SizeOf(Integer)
#OFFSET_LASTELEMENT = - 39 * SizeOf(Integer)
; obj est l'adresse d'un élément d'une liste
; ces macro retournent les adresses mémoire du premier, dernier élément, et de l'élément courant
Macro GetFirstElement_EX(obj)
PeekI(PeekI(obj + #OFFSET_DATA) - 40 * SizeOf(Integer)) + 2 * SizeOf(Integer)
EndMacro
Macro GetLastElement_EX(obj)
PeekI(PeekI(obj + #OFFSET_DATA) - 39 * SizeOf(Integer)) + 2 * SizeOf(Integer)
EndMacro
Macro GetCurrentElement_EX(obj)
PeekI(PeekI(obj + #OFFSET_DATA) - 38 * SizeOf(Integer)) + 2 * SizeOf(Integer)
EndMacro
Et faut faire gaffe avec ça. Je n'ai pas encore testé avec des listes structurée ou des listes dans des structures (apparemment il y a un problème pour les listes dans les structures ;'(