noos88 a écrit :car 'char buf [BUFSIZE]' ne peut être créer avec PurBasic ?
Au lieu de zéro possibilités de le créer, tu en as quatre:
1) La méthode du tableau dynamique
Ici, c'est un tableau dynamique : sa taille peut être modifiée.
2) La méthode du tableau statique. La source est
ici. J'ai fait une macro nommée "tiret" : libre à toi de la renommer comme tu veux ou de ne pas l'utiliser :
Code : Tout sélectionner
;***************************************************************************************************************************************************************************************
Macro _ (StructureName, FieldType, FieldQuantity)
Structure StructureName#MacroExpandedCount
n.FieldType[FieldQuantity]
EndStructure
Define *StructureName.StructureName#MacroExpandedCount = AllocateMemory(SizeOf(StructureName#MacroExpandedCount) )
EndMacro
Dans ce 2nd cas,
peut, grâce à la macro, être traduit par :
Dans ce second cas, le tableau est statique (pas de changement de taille possible. L'équivalent sans la macro, c'est ça :
Code : Tout sélectionner
Structure buf
n.A[256]
EndStructure
*buf.buf = AllocateMemory(256)
3) Ce qui nous amène à une 3ème méthode
Code : Tout sélectionner
Structure buf
n.S{256}
EndStructure
*buf.buf = AllocateMemory(256)
4) Si tu te tâtes entre la 2ème et la 3ème méthode, tu peux faire un hybride :
Code : Tout sélectionner
Structure buf
StructureUnion
n.A[256]
u.S{256}
EndStructureUnion
EndStructure
*buf.buf = AllocateMemory(256)
Pour ces 4 méthodes, on peut voir l'adresse du buffer:
on peut lire une valeur indépendemment:
Code : Tout sélectionner
Debug buf(i) ; meth 1
Debug *buf\n[i] ; meth 2 et 4
Debug *buf\u{i} ; meth 3 et 4
Debug PeekA(*buf + i) ; meth 5
Et on peut obtenir l'adresse de chaque valeur:
Code : Tout sélectionner
Debug @buf(i) ; meth 1
Debug @*buf\n[i] ; meth 2 et 4
Debug @*buf\u{i} ; meth 3 et 4
Debug *buf + i ; meth 5
Rems :
- pour 4 méthodes dégustées, une 5ème offerte
- i est un index qui va de 0 à (BUFSIZE - 1)
- n et u sont des noms choisis au pif
- je considère que BUFSIZE c'est 256, et on peut éviter de répéter 256 dans une définition de structure avec la méta-commande
SizeOf(buf)
- on peut se permettre d'utiliser x méthodes car tu traites des octets (char). La macro permet de faire pareil avec les autres types (word, dword, qword, etc...) sans se soucier des tailles d'allocation en mémoire selon le type.