PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV (earlier versions) → Crypte/compresse VS zlib
Crypte/compresse VS zlib
Started by Youn, Jan., 10 2006 9:40 AM - 1 reply
Posted on January, 10 2006 - 9:40 AM
Pour pallier les défauts de la methode crypte ou compresse censées compresser des données contenues dans un chaine, voici les sources de 2 fonctions permettant de compresser et décompresser avec la dll open source zlib (www.zlib.net)

En effet, ni crypte ni compresse ne fonctionnent sur un fichier binaire qui aurait été chargé dans une chaine par fchargetexte par exemple.

(12 heures de galères avec windev pour pondre le code ci dessous, et oui ce ne sont pas les codes les plus long, les plus faciles a trouver)

PROCEDURE ZlibComp(pdata)

monresultat est une chaîne

tai,tai2 est un entier long sans signe
tai=Taille(pdata)
tai2=Taille(pdata)+(Taille(pdata)*0.1)+12
monresultat=Répète(Asc(0),tai2) //voir api pour comprendre, en fait c pour dimensionner correctement le pointeur en mémoire

SI API("zlib1.dll","compress2",&monresultat,&tai2,&pdata,tai,9)=0 ALORS
SI tai2<tai ALORS //compression rentable ?
RENVOYER Gauche(monresultat,tai2)
SINON
RENVOYER pdata //la meme chose si la compression n'est pas rentable
FIN
SINON
RENVOYER pdata //on renvoie la meme chose si la compression a echouée
FIN




PROCEDURE ZlibUncomp(pdata)

tai,tai2 est un entier long sans signe
monresultat est une chaîne
resapi est un entier

tai=Taille(pdata)

monresultat=Répète(Répète(" ",100),tai) //tampon de réception 10 fois plus gros (le repete emboité sert a améliorer le rendement de la fonction en CPU)
tai20*tai

resapi=API("zlib1.dll","uncompress",&monresultat,&tai2,&pdata,tai) // decompression ok ALORS

SELON resapi
CAS 0 : //ok
RENVOYER Gauche(monresultat,tai2)
CAS -3 : //data non valide pour la décompession, or corruption detected
RENVOYER pdata//pdata car la chaine n'a peut etre pas été comprimée


AUTRE CAS : RENVOYER "ERROR"
FIN
Registered member
6 messages
Posted on May, 13 2022 - 12:50 PM
Bonjour,

Quel est le format de pdata svp ? Peut-on passer une chaine de caractères ?

Merci