Il existe 2 structures type permettant une allocation dynamique exemples :
Première structure type classique accessible par allocatememory() avec pointeur.
Code : Tout sélectionner
Structure cr ;
VA.a[0] ; ascii
VB.b[0] ; byte
VC.c[0] ; character
VS.s{1}[0]; String 1 Byte
VS2.s{2}[0]; String 2 Bytes
VS3.s{3}[0]; String 3 Bytes
VS4.s{4}[0]; String 4 Bytes
VS8.s{8}[0]; String 8 Bytes
Vu.u[0] ; unicode
Vw.w[0] ; word
Vl.l[0] ; long
Vi.i[0] ; integer
Vq.q[0] ; quad
Vf.f[0] ; float
Vd.d[0] ; double
EndStructure
Code : Tout sélectionner
Structure pa ;
Array VA.a(0) ; ascii
Array VB.b(0) ; byte
Array VC.c(0) ; character
Array VS.s{1}(0); String 1 Byte
Array VS2.s{2}(0); String 2 Bytes
Array VS3.s{3}(0); String 3 Bytes
Array VS4.s{4}(0); String 4 Bytes
Array VS8.s{8}(0); String 8 Bytes
Array Vu.u(0) ; unicode
Array Vw.w(0) ; word
Array Vl.l(0) ; long
Array Vi.i(0) ; integer
Array Vq.q(0) ; quad
Array Vf.f(0) ; float
Array Vd.d(0) ; double
EndStructure
et une allocation dynamique par allocatememory() sur pointeur
et aussi par allocatememory() avec une petite bidouille sur une structure en tableau.
Mais je n’ai pas pu allouer dynamiquement la première structure type classique avec ReDim
Voici le PRG et les trois méthodes d'allocation dynamique que j'ai testées.
Pour des besoins personnels j’ai placé toutes les définitions en structure union.
Code : Tout sélectionner
Structure S_X_cr ; S comme structure X comme dimension inconnue et cr comme crochet []
StructureUnion
VA.a[0] ; ascii
VB.b[0] ; byte
VC.c[0] ; character
VS.s{1}[0]; String 1 Byte
VS2.s{2}[0]; String 2 Bytes
VS3.s{3}[0]; String 3 Bytes
VS4.s{4}[0]; String 4 Bytes
VS8.s{8}[0]; String 8 Bytes
Vu.u[0] ; unicode
Vw.w[0] ; word
Vl.l[0] ; long
Vi.i[0] ; integer
Vq.q[0] ; quad
Vf.f[0] ; float
Vd.d[0] ; double
EndStructureUnion
EndStructure
Structure S_X_pa ; S comme structure X comme dimension inconnue et pa comme parenthèse ()
StructureUnion
Array VA.a(0) ; ascii
Array VB.b(0) ; byte
Array VC.c(0) ; character
Array VS.s{1}(0); String 1 Byte
Array VS2.s{2}(0); String 2 Bytes
Array VS3.s{3}(0); String 3 Bytes
Array VS4.s{4}(0); String 4 Bytes
Array VS8.s{8}(0); String 8 Bytes
Array Vu.u(0) ; unicode
Array Vw.w(0) ; word
Array Vl.l(0) ; long
Array Vi.i(0) ; integer
Array Vq.q(0) ; quad
Array Vf.f(0) ; float
Array Vd.d(0) ; double
EndStructureUnion
EndStructure
Structure com_cr_pa
StructureUnion
cr.S_X_cr
pa.S_X_pa
EndStructureUnion
EndStructure
; Structure com_pa_cr
; StructureUnion
; pa.S_X_pa
; cr.S_X_cr
; EndStructureUnion
; EndStructure
Define *Tcr.S_X_cr,*Tpa.S_X_PA,Tpa.S_X_pa,Tcr.S_X_cr
MAX=256
; **** allocation dynamique
Debug "***** Première méthode d'allocation dynamique avec ReDim Tpa\VA(2048) sur tableau"
ReDim Tpa\VA(2048); Première méthode d'allocation dynamique avec redim sur tableau
; ReDim Tcr\VA[1024]; erreur de syntaxe donc impossibilité d'allouer dynamiquement par cette méthode
Debug "***** Deuxième méthode d'allocation dynamique avec allocatememory sur un pointeur"
*Tcr=AllocateMemory(2048)
*Tpa=AllocateMemory(2048); instruction permettant l'allocation dynamique mais impossibilité d'exploiter cette zone
For i=0 To 256
tpa\VA(i)=i
*Tcr\Vw[i]=i*2
; *Tpa\VA(i)=i*3 ; impossible de faire fonctionner cette instruction
Next
Debug "hex(Tpa)="+Hex(Tpa)+" Hex(@Tpa\VA(0)]="+Hex(@Tpa\VA(0))+" Hex(*Tcr)="+Hex(*Tcr)+" Hex(@*Tcr\Va[0])="+Hex(@*Tcr\Va[0])
For jj=0 To 256
Debug "jj="+Str(jj)+" Tpa\va(jj)="+Str(Tpa\VA(jj))+ " *Tcr\vw[jj]="+Str(*Tcr\Vw[jj])
Next
ReDim Tpa\VA(0); Remise à zero de la première méthode pour tester la troisième méthode
Mem_Tpa=Tpa
Debug "******** troisième méthode d'allocation dynamique avec bidouille par allocatememory sur tableau type Tpa !!! ****************"
*TTpa=AllocateMemory(2048)
PokeL(Tpa,*TTpa) ; Bidouille permettant une allocatememory() sur un tableau mais attention conserver l'adresse d'origine Mem_Tpa
For kk=0 To 256
Debug "kk="+Str(kk)+" Tpa\va(kk)="+Str(Tpa\VA(kk))+ " *Tcr\vw[kk]="+Str(*Tcr\Vw[kk])
Next
Debug "*******Il me reste à trouver une quatrième méthode d'allocation dynamique avec redim sur une structure type pointeur *********"
A+