DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • Présentation
  • Pourquoi utiliser le type Buffer ?
  • Le type Buffer : Syntaxe et manipulations
  • Déclarer une variable de type Buffer
  • Déclarer et initialiser une variable de type Buffer
  • Manipulations sur les variables de type Buffer
  • Le type 'Buffer sur' : Syntaxe et manipulations avancées
  • Déclarer une variable de type Buffer sur
  • Manipulations des variables de type 'Buffer sur' (appelés buffers fixes)
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Buffer (Type de variable)
Présentation
Le type Buffer correspond à une zone mémoire binaire.
Grâce à ce type, un code manipulant du binaire sera portable entre une application WINDEV standard et une application WINDEV Mobile.
Sous WINDEV, une variable de type chaîne de caractères 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 de caractères contient des données binaires, ces données peuvent être erronées (conversion malencontreuse par exemple). Pour manipuler des données binaires, nous vous conseillons 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.
WEBDEV - Code Navigateur En code navigateur, le type Buffer est limité : il est notamment disponible pour utiliser les fonctions BufferVersHexa et HexaVersBuffer, la fonction Taille et les fonctions de Hash.
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 :
01

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
Le type Buffer : Syntaxe et manipulations

Déclarer une variable de type Buffer

  • <Nom de la variable> est un Buffer
OU
  • <Nom de la variable 1>, <Nom de la variable 2> sont des Buffers
Détail de la syntaxe
<Nom de la variable> :Nom de la variable à déclarer.

Remarques :
  • Les mots-clés un, une et des ne sont pas obligatoires : ce sont des mots d'agrément.
  • Par défaut, une variable de type Buffer est vide.
Exemple :
MonBuffer est un Buffer

Déclarer et initialiser une variable de type Buffer

Pour déclarer et initialiser une variable de type Buffer, il est possible d'utiliser la syntaxe suivante :
<Nom de la variable> est un Buffer = [<Valeur hexa 1>, <valeur hexa 2>, ..., <Valeur hexa N>]
Détail de la syntaxe
<Nom de la variable> :Nom de la variable à déclarer.
Valeur hexaValeur hexadécimale.

Exemple :
b est un Buffer = [0x01, 0x02, 0x03]

Manipulations sur les variables de type Buffer

Les variables de type Buffer peuvent être manipulés de la même façon qu'une variable de type Chaîne de caractères.
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"
    // En ANSI, la variable MonBuffer contient : WINDEV est formidable
    // En UNICODE, la variable MonBuffer contient :
    // W0i0n0D0e0v0 0e0s0t0 0f0o0r0m0i0d0a0b0l0e0
  • 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 // MonBuffer contient "A"
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.
    WEBDEV - Code Navigateur 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]])
WEBDEV - Code Navigateur Non disponible.
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 ...
WEBDEV - Code Navigateur Non disponible.
Le type 'Buffer sur' : Syntaxe et manipulations avancées

Déclarer une variable de type Buffer sur

<Nom de la variable> est un Buffer sur <Taille du buffer>
OU
<Nom de la variable 1>, <Nom de la variable 2> sont des Buffers sur <Taille des buffers>
Détail de la syntaxe
<Nom de la variable> :Nom de la variable à déclarer.
<Taille du buffer> :Taille en octets du buffer.

Remarques :
  • Les mots-clés un, une et des ne sont pas obligatoires : ce sont des mots d'agrément.
  • Par défaut, une variable de type 'Buffer sur' est remplie avec le caractère '0'.
  • WEBDEV - Code Navigateur Le type 'Buffer sur' n'est pas disponible.
Exemples :
MonBuffer est un Buffer sur 4
MonBuffer = "ABCDE" // MonBuffer contient "ABCD"
MonBuffer = "ZZ"    // MonBuffer contient "ZZCD"

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)
Version minimum requise
  • Version 11
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire