Je suis désolé de vous déranger, mais c'est pour KCC un besoin vital, enfin presque car KCC il mange toujours rassurez vous
Voila, je ne sais pas si vous l'avez lu, mais je cherche depuis plus d'un mois une methode pour passer des tabeaux de strings entre VB/PB et une DLL
Apres des dizaines de posts, de nombreuses aides que je remercie encore
J'ai pu arriver a une solution qui apparement marche.
Mais elle est tres lourde
Donc, comme cette fonction va etre a la base de dizaine de mes programmes, je voudrais etre sur de choisir la bonne, et si il n'y a pas beaucoup plus simple.
Alors voila, au milieu des aides, j'ai demandé si l'ASM ne pouvait pas faire quelque chose pour moi a FRED, sur la gestion des tableaux
Et XOMBIE m'a gentillement fait ce code
Il est beau, court comme tous les codes ASM, et puissant
XOMBIE a pourtant tenté de me l'expliquer, mais j'ai pas tout compris.
Il a pourtant pris la peine de commenter chaque ligne ou presque, mais parler de pile a KCC, ça lui parle autant , que si on lui donne un cours sur le langeage des bébés
Et en plus, il faut dire aussi que l'ASM est bien assez compliqué comme ça pour ne pas y rajouter l'anglais
Donc, si un de vous pourrait, avoir la gentillesse de m'expliquer "simplement" si c'est possible, ce que fait ce code.
Surtout dans un premier temps la demarche, en une phrase, pour voir si il serait exploitable dans ce que je cherche a faire...
Car ce n'est pas la peine d'entrer dans les details et vous faire perdre votre precieux temps, si il ne m'est pas utile
Code : Tout sélectionner
; http://www.purebasic.fr/english/viewtopic.php?p=294524#p294524
! extrn _SYS_ReAllocateArray@8
; PB calls this to REDIM an array.
ProcedureDLL.l CreateArray(Array a.s(1), Lettre$)
; Pass the array as the first parameter - the array must have been declared before calling this procedure.
Define.l xx
;
! PUSH dword [p.a_a]
; Put the address of the array on the stack. Use p.a_ for arrays, p.v_ for variables and p.l_ for linked lists.
! MOV Eax, 5
; Put the number of items you want to REDIM the array to. This would be 5 items, 0 to 4.
! PUSH Eax
; Push the value of Eax onto the stack.
! CALL _SYS_ReAllocateArray@8
; Call the ReAllocateArray function with the value of Eax (5) and the address of the array as parameters. Note the @8 as the two parameters are both long values. It's like calling ReAllocateArray(ArrayA(), 5) only in ASM.
;
For x = 1 To 5
a(x - 1) = RSet("", x, Lettre$)
Next
;
EndProcedure
Dim ArrayA.s(10)
Debug ArraySize(ArrayA())
CreateArray(ArrayA(), "a")
Debug ArraySize(ArrayA())
Dim ArrayB.s(0)
CreateArray(ArrayB(), "b")
For i = 0 To ArraySize(ArrayA())
Debug "Premier essai = " + ArrayA(i)
Next
For i = 0 To ArraySize(ArrayB())
Debug "Second essai = " + ArrayB(i)
Next i