|
|
|
|
|
- Pourquoi utiliser le type Buffer ?
- Affectation d'une variable de type Buffer
- Utilisation des fonctions
- Utilisation des opérateurs
- Comparaison de buffers
- Manipulations des variables de type 'Buffer sur' (appelés buffers fixes)
- Notes
Buffer (Type de variable) En anglais : Buffer
Le type Buffer correspond à une zone mémoire binaire. Grâce à ce type, un code manipulant des données binaires sera portable entre une application WINDEV standard et une application WINDEV Mobile. - Sous WINDEV, une variable de type "chaîne" peut aussi bien contenir des caractères que des données binaires (une image par exemple).
- Sous WINDEV Mobile, si une variable de type "chaîne" contient des données binaires, ces données peuvent être erronées (conversion malencontreuse par exemple). Pour manipuler des données binaires, il est conseillé d'utiliser une variable de type Buffer.
Le type Buffer ne gère pas de marqueur spécifique de fin et permet de stocker des 0 binaires. Deux types de variables sont disponibles : - Buffer : Ce type permet de manipuler une zone mémoire dont la taille est dynamique : elle s'adapte automatiquement au contenu du buffer.
- Buffer sur : Ce type permet de manipuler une zone mémoire dont la taille (en octets) est fixée à la compilation. Ce type est un type avancé permettant de réaliser certaines manipulations spécifiques en mémoire, d'utiliser certaines API Windows.
Remarque : Les variables de type Buffer sont encodés en base64 en JSON et en XML. Pourquoi utiliser le type Buffer ? Sous WINDEV, il est possible d'utiliser le code suivant pour manipuler des octets en binaire : S est une chaîne = Caract(1) + Caract(0)
La zone mémoire correspondante est :
Ce même code exécuté en ANSI et en Unicode n'a pas le même comportement. Pour avoir un code identique en ANSI et en Unicode, il est nécessaire de remplacer la chaîne par un buffer. Le code devient alors :
S est un Buffer
S[[1]] = 1
S[[2]] = 0
Syntaxe
Déclarer une variable de type Buffer Masquer les détails
<Nom de la variable> est un Buffer
<Nom de la variable 1>, <Nom de la variable 2> sont des Buffers
<Nom de la variable> : Nom de la variable à déclarer. Par défaut, une variable de type Buffer est vide.
Déclarer et initialiser une variable de type Buffer Masquer les détails
<Nom de la variable> est un Buffer = [<Valeur hexa 1>, <Valeur hexa 2>, ..., <Valeur hexa N>]
<Nom de la variable> : Nom de la variable à déclarer. <Valeur hexa> : Valeur hexadécimale. Exemple :
b est un Buffer = [0x01, 0x02, 0x03]
Déclarer une variable de type Buffer sur Masquer les détails
<Nom de la variable> est un Buffer sur <Taille du buffer>
<Nom de la variable 1>, <Nom de la variable 2> sont des Buffers sur <Taille des buffers>
<Nom de la variable> : Nom de la variable à déclarer. Par défaut, une variable de type Buffer est vide. <Taille du buffer> : Taille en octets du buffer. Par défaut, une variable de type 'Buffer sur' est remplie avec le caractère '0'.
Exemples :
MonBuffer est un Buffer sur 4
MonBuffer = "ABCDE"
MonBuffer = "ZZ"
Remarques Affectation d'une variable de type Buffer Pour affecter une variable Buffer, utilisez une des syntaxes suivantes : - affectation d'une chaîne à une variable de type Buffer :
<Nom de la variable Buffer> = <Ma Chaîne>. Par exemple :
MonBuffer est un Buffer
MonBuffer = "WINDEV est formidable"
- affectation d'un octet de la variable Buffer :
<Nom de la variable Buffer> [[<Indice de l'octet>]] = <Code ASCII de l'octet>. Par exemple :
MonBuffer est un Buffer
MonBuffer[[1]] = 65
Utilisation des fonctions - Les fonctions Gauche, Droite et Milieu sont utilisables sur les variables de type Buffer. Pour plus de détails sur la syntaxe à utiliser, consultez l'aide de ces fonctions.
Non disponible. - La fonction Taille permet de connaître la taille réelle des données contenues dans la variable de type Buffer (en octets).
Utilisation des opérateurs L'opérateur [[ ]] permet d'accéder : - à un octet de la variable de type Buffer. Par exemple :
MonBuffer est un Buffer
MonBuffer = "WINDEV est formidable"
MonBuffer[[1]] = "W"
- Ã une partie de la variable de type Buffer. Par exemple :
MonBuffer est un Buffer
MonBuffer = "WINDEV est formidable"
Info(MonBuffer[[8 À 15]])
Comparaison de buffers Il est possible de comparer un buffer ou une portion de buffer à un buffer en littéral. Il est possible d'écrire par exemple : SI MonBuffer = [1,2,3] ALORS ...
SI MonBuffer[1 SUR 2] = [1,2] ALORS ... Manipulations des variables de type 'Buffer sur' (appelés buffers fixes) Les buffers fixes se manipulent de la même manière que les buffers simples. Cependant, quelques différences doivent être prises en compte. En effet, en cours d'exécution, la taille réelle des données contenues dans la variable de type Buffer n'est pas connue : - Lors d'une écriture plus longue que la taille de la variable Buffer, l'écriture est tronquée à la taille de la variable Buffer.
- Lors d'une écriture plus petite que la taille de la variable Buffer, la partie non écrite de la variable Buffer conserve sa valeur précédente.
Pour manipuler ce type de variable Buffer, il est conseillé de toujours stocker la taille réelle du buffer dans une variable de type Entier. Rappel : le type Buffer gère automatiquement sa taille. Lors de l'utilisation d'un buffer fixe, il est recommandé de copier rapidement sa valeur dans un buffer automatique.
// Utilisation d'une API retournant la taille d'un buffer bBufferFixe est un Buffer sur 200 nTaille est un entier // Appel de l'API nTaille = API(<Nom API>, <Paramètres>, bBufferFixe,200) // Copie du buffer bBuffer est un Buffer bBuffer = Gauche(bBufferFixe, nTaille) Une variable de type "Buffer" est limitée à 2 Go. Indirectement, les fonctions manipulant des buffers sont impactées par cette limite.
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|