Mon Cpl préféré parmis tous les Cpl du monde
J'en crois pas mes petits yeux, je crois que ça marche
C'est tellement beau que je n'ose y croire, apres 3 jours de recherche et je ne sais combien d'heure
Bref ....j'essaierais de mettre en place ta combine dans ma DLL mardi.
J'espere que je vais encore pas trouvé un truc qui coince
KCC y commence a etre mefiant maintenant
Je te remercie sincerement mille fois de ta precieuse combine et de tout ton soutiens
Apparement c'est exactement ce que je voulais
Bon............ XOMBIE, m'a dit que dans ce code je gerais mal la memoire
il m'a corrigé cette gestion, il me reste a adapter son code au tiens et au miens, en fait je met tout dans une bassine et je touille
Voici sa correction, si ça interesse "quinquin"
Code : Tout sélectionner
Procedure FreePBString(*Address)
; Procedure and method of removing structure strings from memory from freak @ http://www.purebasic.fr/english/viewtopic.php?t=23099&start=0
Protected String.String
;
PokeL(@String, *Address)
;
EndProcedure
ProcedureDLL.l CreateArray(Which.i)
;
Define.i xx, *PointerString
;
*PointerString = AllocateMemory(100000 << ((SizeOf(Integer) >> 2) + 1)); Tableau de pointeur
;
If Which = 1
Lettre.s = "a"
Else
Lettre.s = "b"
EndIf
;
For x = 1 To 5
LenString = Len(RSet("", x, Lettre))
*String = AllocateMemory((LenString << (SizeOf(Character) - 1)) + SizeOf(Character))
PokeS(*String, RSet("", x, Lettre))
PokeI(*PointerString + ((x - 1) << ((SizeOf(Integer) >> 2) + 1)), *String); ((x - 1) << (SizeOf(Integer) >> 2)), *String)
xx + 1
Next
;
*PointerString = ReAllocateMemory(*PointerString, xx << ((SizeOf(Integer) >> 2) + 1))
;
ProcedureReturn *PointerString
;
EndProcedure
*MemoryA = CreateArray(1)
*MemoryB = CreateArray(2)
SizeA.i = MemorySize(*MemoryA) >> 2
Debug SizeA
SizeB.i = MemorySize(*MemoryB) >> 2
Debug SizeB
For i = 1 To SizeA
Debug "Premier essai = " + PeekS(PeekI(*MemoryA + ((i - 1) << ((SizeOf(Integer) >> 2) + 1))))
Next
For i = 1 To SizeB
Debug "Premier essai = " + PeekS(PeekI(*MemoryB + ((i - 1) << ((SizeOf(Integer) >> 2) + 1))))
Next
Debug "Free A..."
For i = 1 To SizeA
FreePBString(PeekI(*MemoryA + ((i - 1) << ((SizeOf(Integer) >> 2) + 1))))
Next
Debug "Free B..."
For i = 1 To SizeB
FreePBString(PeekI(*MemoryB + ((i - 1) << ((SizeOf(Integer) >> 2) + 1))))
Next
FreeMemory(*MemoryA)
FreeMemory(*MemoryB)
On sent que c'est pas du KCC code...hein !!!!

Noir de chose que je ne connais pas
Au passage, comme je demandais une solution pour connaitre l'arraysize d'un tableau, il m'a fait aussi un super code avec le language de mes reves......
Mais la, on en parle meme pas, c'est pas que je comprend pas quelques instructions......c'est que je comprend que deux lignes
Mais ça fait rien, c'est tellement beau l'ASM, je suppose qu'il va lire justement ou FRED il ecris la taille de l'array
Code : Tout sélectionner
! extrn _SYS_ReAllocateArray@8
ProcedureDLL.l CreateArray(Array a.s(1), Lettre$)
;
Define.l xx
;
! PUSH dword [p.a_a]
! MOV Eax, 5
! PUSH Eax
! CALL _SYS_ReAllocateArray@8
;
For x = 1 To 5
a(x - 1) = RSet("", x, Lettre$)
Next
;
EndProcedure
Dim ArrayA.s(0)
CreateArray(ArrayA(), "a")
Debug ArraySize(ArrayA())
Dim ArrayB.s(0)
CreateArray(ArrayB(), "b")
Debug ArraySize(ArrayB())
For i = 0 To ArraySize(ArrayA())
Debug "Premier essai = " + ArrayA(i)
Next
For i = 0 To ArraySize(ArrayB())
Debug "Second essai = " + ArrayB(i)
Next
C'est dingue ce qu'en quelque lignes on peut faire en ASM

Bon si avec vous deux j'arrive pas a faire peter la banque
Voila....je crois que je vous ai tout dit
Ah non...voici donc ce que je recherchais ...sans la correction de la gestion de memoire que m'a proposé XOMBIE
Code : Tout sélectionner
ProcedureDLL.l CreateArray(Parametre)
Static Passage, xx, *PointerString
Passage + 1
If Passage = 1
*PointerString = AllocateMemory(100000 * 4); Tableau de pointeur
If Parametre = 1
Lettre.s = "a"
Else
Lettre.s = "c"
EndIf
Else
If Parametre = 2
Lettre.s = "b"
Else
Lettre.s = "d"
EndIf
EndIf
For x = 1 To 4
xx + 1
LenString = Len(RSet("", xx, Lettre))
*String = AllocateMemory(LenString * 4)
PokeS(*String, RSet("", xx, Lettre))
PokeI(*PointerString + (xx * 4), *String)
Next
If Passage = 1
CreateArray(Parametre)
ReAllocateMemory(*PointerString, (xx * 4) + 4)
Passage = 0
xx = 0
EndIf
PokeI(*PointerString, #Null)
ProcedureReturn *PointerString
EndProcedure
Dim ArrayA.s(0)
ArrayA() = CreateArray(1)
Dim ArrayB.s(0)
ArrayB() = CreateArray(2)
For i = 1 To (MemorySize(ArrayA()) / 4) - 1
Debug "Premier essai = " + ArrayA(i)
Next
For i = 1 To (MemorySize(ArrayB()) / 4) - 1
Debug "Second essai = " + ArrayB(i)
Next
Voila......cette fois je crois que j'ai tout dit jusqu'a ma prochaine tuile
Cpl et Xombie je vous aime
Je vous souhaite à tous une bonne soirée