begin process at 2012 02 16 04:58:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Compression & Split

 > COMPRESSION PAR DLL

COMPRESSION PAR DLL


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Compression & Split Classé sous :compression, dll Niveau :Débutant Date de création :02/09/2006 Date de mise à jour :04/09/2006 18:21:07 Vu / téléchargé :9 088 / 810

Auteur : BruNews

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (25)
Ajouter un commentaire et/ou une note


 Description

DLL pour ajouter aisément la compression dans vos progs.
Cette DLL est API (vraie DLL), rien à enregister en base de registres.

Voir implémentation ici:
ZLIB REVUE EN PUR WIN32 ET SANS CRT
http://www.cppfrance.com/code.aspx?ID=39145


UTILISATION DEPUIS VB (et autres):
Option Explicit

Declare Function bnZipFile Lib "bnzlib.dll" (ByVal sSrc As String, ByVal sDst As String) As Long
Declare Function bnUnzipFile Lib "bnzlib.dll" (ByVal sSrc As String, ByVal sDst As String) As Long
Declare Function bnZipFileSec Lib "bnzlib.dll" (ByVal sSrc As String, ByVal sDst As String, ByVal passNbr As Long) As Long
Declare Function bnUnzipFileSec Lib "bnzlib.dll" (ByVal sSrc As String, ByVal sDst As String, ByVal passNbr As Long) As Long
Declare Function bnUnzipFileSecMin Lib "bnzlib.dll" (ByVal sSrc As String, ByVal sDst As String, ByVal passNbr As Long) As Long

ATTENTION:
- Ce qui est compresé par bnZipFileSec() doit être décompressé avec bnUnzipFileSec() ou bnUnzipFileSecMin().
- Toute tentative de décompression par bnUnzipFileSec() verra le prog appelant démappé de la mémoire si le passNbr est faux.
- bnUnzipFileSecMin() ne décharge pas l'appelant mais retourne BNERR_SYST si le passNbr est faux.

' Retours possibles des 2 fonctions:
'   BNERR_OK = 0 QUI EST REUSSITE
'   BNERR_STREAMEND = 1
'   BNERR_NEEDDICT = 2
'   BNERR_FILE = 3
'   BNERR_SYST = 4
'   BNERR_STREAM = -2
'   BNERR_DATA = -3
'   BNERR_MEM = -4
'   BNERR_BUF = -5

Sub TestCmprss()
  Dim r As Long
  r = bnZipFile("D:\BruNews\Scrab.mdb", "D:\Scrab.bnz")
  MsgBox r
End Sub

Sub TestUncmprss()
  Dim r As Long
  r = bnUnzipFile("D:\Scrab.bnz", "D:\Scrab.mdb")
  MsgBox r
End Sub

' -- COMPRESSION AVEC PASSWORD 32 BITS ---

Sub TestCmprssSecu()
  Dim r As Long
  r = bnZipFileSec("D:\BruNews\Scrab.mdb", "D:\Scrab.bnz", 18987)
  MsgBox r
End Sub

' ATTENTION SI bnz EST FAIT PAR bnZipFile()
'   OU bnZipFileSec() AVEC passNbr DIFFERENT
' RETOURNE BNERR_SYST
Sub TestUncmprssSecuMin()
  Dim r As Long
  r = bnUnzipFileSecMin("D:\Scrab.bnz", "D:\Scrab.mdb", 18987)
  MsgBox r
End Sub

' ATTENTION SI bnz EST FAIT PAR bnZipFile()
'   OU bnZipFileSec() AVEC passNbr DIFFERENT
' FERMETURE IMMEDIATE DE CE PROG A PREVOIR
Sub TestUncmprssSecu()
  Dim r As Long
  r = bnUnzipFileSec("D:\Scrab.bnz", "D:\Scrab.mdb", 18987)
  MsgBox r
End Sub



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • bnzlib.dllTélécharger ce fichier [Réservé aux membres club]27 136 octets
  • bnzlib.txtTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 290 octets

Télécharger le zip


 Historique

04 septembre 2006 16:49:47 :
Versions sécurisées
04 septembre 2006 18:21:07 :
Ajout de bnUnzipFileSecMin().

 Sources du même auteur

Source avec Zip VIRGULES <=> POINTS, REMPLACE DANS FICHIER PAR DLL
Source avec Zip GENERATEUR DE TABLEAUX DE NOMBRES POUR VB/VBA
Source avec Zip DLL POUR VB/VBA (9)
Source avec Zip CTRL+ALT+SUPPR INTERCEPTION SUR XP
Source avec Zip DLL POUR VB/VBA (8)

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) ZIP UNZIP DOSSIER (COMPRENANT FICHIER(S) ET SOUS DOSSIER(S))... par ManuOrange
Source avec Zip COMPRESSION / DECOMPRESSION SELON L'ALGORITHME LEMPELZIV 78V par th1man
Source .NET (Dotnet) DÉCOMPRESSER EN .NET PLUSIEURS FORMATS POPULAIRES D'ARCHIVAG... par NikatorS
Source .NET (Dotnet) DÉCODAGE YENC EN VB.NET par NINATECH
Source avec Zip Source avec une capture Source .NET (Dotnet) SEVENZIP CONSOLE par PWM63

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture BOULE DE CRISTAL par BLUEBIBUBBLE
Source avec Zip Source avec une capture Source .NET (Dotnet) GÉNÉRATEUR DE GRAPHIQUE par pascamau
COMPRESSION D'UN DOSSIER AVEC WINZIP par djebbipgm
Source avec Zip DLL PERSONNALISÉ AVEC ÉVÈNEMENTS ET PROPRIÉTÉS EN VB6. par Number7
Source avec Zip Source .NET (Dotnet) DLL POUR K8055 (VM110) UTILISATION SIMPLIFIÉE DE CETTE CARTE par Adn56

Commentaires et avis

Commentaire de jack le 02/09/2006 18:20:31 administrateur CS

Du VB par BruNews ? ... must see !
Bien sûr, ça marche impec. Merci
Il faut quand même rappeler qu'il faut implanter la DLL dans le répertoire %Win%\System32 (ou préciser le chemin dans la déclaration = pas propre et instransportable)
Comme détaillé dans la source C (lien du commentaire), ce n'est pas une compression compatible ZIP, alors ne venez pas demander.

Les questions qui viennent ensuite :
- Comment faire pour insérer plusieurs fichier dans une même archive ?
- Comment lister le ou les fichiers que renferme une archive ?
- Comment mémoriser les chemins relatifs ? (et comment les restituer)

Dans une prochaine version de la DLL ?

Commentaire de Goel le 02/09/2006 18:21:59

Et bien je viens de tester. c'est bcp plus rapide que l'ancien.  Félicitation pour ce boulot, car ca marche parfaitement. 10/10!

En plus très utile!!
tu viens de rendre un énorme service sur mon projet qui nécéssitait de compresser, decompresser des fichier (pour update).

Commentaire de jack le 02/09/2006 18:22:55 administrateur CS

Si tu pouvais détailler ce que signifient les n° d'erreurs retournées par les fonctions ?

Commentaire de Goel le 02/09/2006 18:23:28

a vria dire, le DLL est dans le dossier d'execution du programme l'utilisant. Aucun besoin de l'avoir dans le systeme semble t'il.

Commentaire de BruNews le 02/09/2006 18:46:08 administrateur CS

BNERR_OK = REUSSITE
BNERR_FILE = erreur sur ouverture du fichier source ou création du fichier cible.
BNERR_SYST = erreur lecture ou écriture des fichiers.
BNERR_MEM = erreur mémoire indisponible.
BNERR_BUF = erreur interne, buffer de décompression trop petit, me le signaler si (cas improbable) devait arriver, j'augmenterai la taille.
Les autres cas d'erreurs sont internes aux algos zlib, considérer que les données sont altérées.

Niet jack, comme précisé sur les sources C, hors de question de refaire un concurrent winzip, ce n'est pas le but.
Si qlq'un a besoin d'une version personnalisée de la DLL afin que les données ne soient pas déchiffrables par un autre soft, me le demander et sera fait selon disponibilité.

Commentaire de BruNews le 02/09/2006 18:49:38 administrateur CS

PRECISION:
Placer un appel SetCurrentDirectory(app.path) au tout début du prog assure que la DLL est trouvée dans le dossier de l'exe, ça permet de distribuer des progs avec différentes versions de la DLL.

Commentaire de EBArtSoft le 02/09/2006 18:57:17 administrateur CS

Jack> Correction, ce n'est pas du VB !
BruNews> Sans vouloir t'offensé je me demande même ce que ça vient faire ici :

- Ce n'est pas du VB.
- Il n'y a pas de code source.
- Il n'y a pas projet d'exemple mais seulement une dll.

Bref j'en connais deux/trois qui aurait deja viré le post depuis longtemps. Autant utilisé Zlib qui est libre de droit completement compatible avec vb dont les sources sont diponible avec des projet demo. Cela n'enleve pas l'excelence de ton travail mais cela n'est pas correct vis a vis des autres usager de CS a qui l'on reproche ce genre de pratique.

@+

Commentaire de BruNews le 02/09/2006 19:11:07 administrateur CS

Avec les 2 'Declare', il y a 12 lignes en VB.
C'est donc une source exemple avec un code libre de droit et d'utilisation dont les sources sont fournies en lien dans la partie 'description'.

Commentaire de eldim le 04/09/2006 09:54:16

Bonjour,

j'ai pas encore testé mais jusqu'à combien de Go elle peut compresser par fichier et en tout ?

Commentaire de BruNews le 04/09/2006 10:52:06 administrateur CS

Si l'alloc mémoire réussit au début (non dépendant de taille fichier), aucune limite (64 bits full).

Commentaire de asimengo le 04/09/2006 11:58:50

@Brunews : y'a t-il une possibilité de compresser/décompresser avec option password sur ta DLL?

Commentaire de BruNews le 04/09/2006 12:25:38 administrateur CS

Aucun password dans cette version standard.

Irait ainsi:
Declare Function bnZipFileSecure Lib "bnzlib.dll" (ByVal sSrc As String, ByVal sDst As String, ByVal passNbr As Long) As Long
Declare Function bnUnzipFileSecure Lib "bnzlib.dll" (ByVal sSrc As String, ByVal sDst As String, ByVal passNbr As Long) As Long
je RAJOUTE ces 2 fonctions avec un param 32 bits, si bnUnzipFileSecure() appelé et que passNbr ne correspond pas, au choix je retourne BNERR_DATA (histoire de ne pas indiquer quelle erreur) ou alors je démappe direct le processus appelant de la mémoire (éviter piratage par tentative en boucle).

Commentaire de asimengo le 04/09/2006 14:22:55

@Brunews : comment faire pour avoir la version qui intègre bnZipFileSecure et bnUnzipFileSecure. Une mise à jour est-elle avenir? ou alors http://www.cppfrance.com/code.aspx?ID=39145 ferait l'affaire.

Comme tu le disais avec un appel SetCurrentDirectory(app.path) au début pas besoin de ...
Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long

Commentaire de BruNews le 04/09/2006 14:53:56 administrateur CS

MAJ de la source pour ce soir si tout va bon.

Commentaire de BruNews le 04/09/2006 16:51:37 administrateur CS

MAJ disponible.

Commentaire de asimengo le 04/09/2006 17:57:45

Merci Brunews, super nickel.

juste un point sur ce commentaire
' ATTENTION SI bnz EST FAIT PAR bnZipFile()
'   OU bnZipFileSec() AVEC passNbr DIFFERENT
' FERMETURE IMMEDIATE DE CE PROG A PREVOIR
Je constate également que si le fichier n'est pas un vrai fichier *.bnz le programme se ferme.
Comment prévoir/empêcher ce plantage?
ça ressemble à vouloir le pain chargé + argent du chargement.

Mais en réalité ça peut devenir un grand problème si cette option est intégrée à un programme libre qui doit planter chaque fois que l'utilisateur sélectionne le mauvais fichier ou donne un mauvais password. Même un conseil pour le contrôle du plantage serait toujours super.

Commentaire de BruNews le 04/09/2006 18:09:45 administrateur CS

A moins de décompiler puis modifier le code binaire de la DLL, rien à intercepter, c'est fermeture (et non plantage).

J'ajoute bnUnzipFileSecMin() qui sera idem que bnUnzipFileSec() mais retournera BNERR_SYST si pass faux mais sans fermer l'appelant. Sera dernière MAJ.

Commentaire de BruNews le 04/09/2006 18:21:33 administrateur CS

C'est fait.

Commentaire de asimengo le 04/09/2006 19:39:32

beaucoup beaucoup merci, c génial.

Commentaire de eldim le 05/09/2006 08:08:09

Bonjour,

Après test, cela compress légèrement mieux que C#Zip de sourceforge mais y a-t-il la possibilité possibilité de compresser tout un répertoire ? si oui y a-t-il possibilité de faire de la compression "intelligente" à savoir ne compresser que les fichiers qui ne sont pas déja dans le zip ou qui sont différents de ceux déja présents ?

Commentaire de BruNews le 05/09/2006 09:34:49 administrateur CS

Fait pour compresser les fichiers de données de VOS progs, pas prévu pour concurrencer winzip ou winrar.

Commentaire de eldim le 05/09/2006 10:14:05

ok pas de polémique mais bon... hem... heureusement qu'y C#lib

Commentaire de BruNews le 05/09/2006 10:27:02 administrateur CS

Chaque chose a son emploi, voila tout. Ajouter le multi fichier dans archive ne serait techniquement pas difficile mais c'est long à mettre en place, à moins d'une commande privée, aucune chance que je perde du temps dessus.
Polémique, sur quoi ???

Commentaire de Grandnord le 10/10/2006 21:45:17

Est-ce possible de compresser des répertoires avec les sous-répertoires?

Commentaire de BruNews le 10/10/2006 21:57:27 administrateur CS

ah ben non, pas le but du jeu du tout.

Si tu y tiens, reprends le code (lien en decription de source) et appelle le en récurrence sur FindFirstFile() FindNextFile(). Pas besoin d'être grand clerc mais vraiment pas le temps de le faire.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Compression en vb.NET [ par stranix ] Bonjour à tous,Voici un problème tout simple sur lequel je cale depuis des jours et des jours: comment compresser un fichier en vb.NET ? J'ai bien tro Lz32.dll [ par logik51 ] Salut,Lz32.dll est une Routines de compression 32 bits utilisée par windows....j'aimerai pouvoir compresser des fichiers via une aplli VB grace à cett Compression par Fast Fourrier Transform pour WebPhone.... [ par grosiflex ] Bon, j'ai concu un petit Web Phone tres simpliste, basé sur la dll d'acces au matos sonor de Windows (WinMM.dll) et sur les Winsock standard de VB.je Lancer un executable sans lancer son setup [ par Kepone ] Salut,j'aimerais pouvoir faire fonctionner une de mes applis sans faire une installation préalable. En gros j'aimerais avoir sur un cd l'éxécutable ai Propriétés DLL [ par CBlanchet ] Bonjour,j'ai un programme qui doit vérifier si la DLL s'est bien compilé avant de l'installer.Je sais que je dois utilisé les propriétés "UNATTENDED E Urgent pb d'empaquetage???? [ par sonia2002 ] salut tt le monde,j'ai developpe une application client/serveur avec vb6 et sql serv2000 et crystal report 7.0, lors de l'empaquetage l'aasistant four Perte de mes dernière modif [ par AkaSya ] Bonjour à tous!Ce n'est vraiment pas ma journée! En voulant mettre dans source safe les dernière modif sur une de mes classe, j'ai malheureusement rem urgent : lire une DLL [ par gan ] Est ce quelqun peut me sauver la vie , comment faire pour lire ce qu'il y a dans une DLL???? Où mettre les .dll [ par olicool ] J'ai besoin d'aide. Je ne sais pas où mettre mais .dll et .ocx quand je met des projet dans un autre PC. Ça marche dans le bureau mais c laid pis sa p Vitesse processeur Registre (Appli professionnel) [ par Kepone ] Salut,j'ai un probleme avec une appli qui va me servir dans ma société.Je dois entre autre récupéré la vitesse du processeur de la machine sur laquell


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,044 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales