kusano 7d535a
See below some functions declarations for Visual Basic.
kusano 7d535a
kusano 7d535a
Frequently Asked Question:
kusano 7d535a
kusano 7d535a
Q: Each time I use the compress function I get the -5 error (not enough
kusano 7d535a
   room in the output buffer).
kusano 7d535a
kusano 7d535a
A: Make sure that the length of the compressed buffer is passed by
kusano 7d535a
   reference ("as any"), not by value ("as long"). Also check that
kusano 7d535a
   before the call of compress this length is equal to the total size of
kusano 7d535a
   the compressed buffer and not zero.
kusano 7d535a
kusano 7d535a
kusano 7d535a
From: "Jon Caruana" <jon-net@usa.net></jon-net@usa.net>
kusano 7d535a
Subject: Re: How to port zlib declares to vb?
kusano 7d535a
Date: Mon, 28 Oct 1996 18:33:03 -0600
kusano 7d535a
kusano 7d535a
Got the answer! (I haven't had time to check this but it's what I got, and
kusano 7d535a
looks correct):
kusano 7d535a
kusano 7d535a
He has the following routines working:
kusano 7d535a
        compress
kusano 7d535a
        uncompress
kusano 7d535a
        gzopen
kusano 7d535a
        gzwrite
kusano 7d535a
        gzread
kusano 7d535a
        gzclose
kusano 7d535a
kusano 7d535a
Declares follow: (Quoted from Carlos Rios <c_rios@sonda.cl>, in Vb4 form)</c_rios@sonda.cl>
kusano 7d535a
kusano 7d535a
#If Win16 Then   'Use Win16 calls.
kusano 7d535a
Declare Function compress Lib "ZLIB.DLL" (ByVal compr As
kusano 7d535a
        String, comprLen As Any, ByVal buf As String, ByVal buflen
kusano 7d535a
        As Long) As Integer
kusano 7d535a
Declare Function uncompress Lib "ZLIB.DLL" (ByVal uncompr
kusano 7d535a
        As String, uncomprLen As Any, ByVal compr As String, ByVal
kusano 7d535a
        lcompr As Long) As Integer
kusano 7d535a
Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As
kusano 7d535a
        String, ByVal mode As String) As Long
kusano 7d535a
Declare Function gzread Lib "ZLIB.DLL" (ByVal file As
kusano 7d535a
        Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
kusano 7d535a
        As Integer
kusano 7d535a
Declare Function gzwrite Lib "ZLIB.DLL" (ByVal file As
kusano 7d535a
        Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
kusano 7d535a
        As Integer
kusano 7d535a
Declare Function gzclose Lib "ZLIB.DLL" (ByVal file As
kusano 7d535a
        Long) As Integer
kusano 7d535a
#Else
kusano 7d535a
Declare Function compress Lib "ZLIB32.DLL"
kusano 7d535a
        (ByVal compr As String, comprLen As Any, ByVal buf As
kusano 7d535a
        String, ByVal buflen As Long) As Integer
kusano 7d535a
Declare Function uncompress Lib "ZLIB32.DLL"
kusano 7d535a
        (ByVal uncompr As String, uncomprLen As Any, ByVal compr As
kusano 7d535a
        String, ByVal lcompr As Long) As Long
kusano 7d535a
Declare Function gzopen Lib "ZLIB32.DLL"
kusano 7d535a
        (ByVal file As String, ByVal mode As String) As Long
kusano 7d535a
Declare Function gzread Lib "ZLIB32.DLL"
kusano 7d535a
        (ByVal file As Long, ByVal uncompr As String, ByVal
kusano 7d535a
        uncomprLen As Long) As Long
kusano 7d535a
Declare Function gzwrite Lib "ZLIB32.DLL"
kusano 7d535a
        (ByVal file As Long, ByVal uncompr As String, ByVal
kusano 7d535a
        uncomprLen As Long) As Long
kusano 7d535a
Declare Function gzclose Lib "ZLIB32.DLL"
kusano 7d535a
        (ByVal file As Long) As Long
kusano 7d535a
#End If
kusano 7d535a
kusano 7d535a
-Jon Caruana
kusano 7d535a
jon-net@usa.net
kusano 7d535a
Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member
kusano 7d535a
kusano 7d535a
kusano 7d535a
Here is another example from Michael <michael_borgsys@hotmail.com> that he</michael_borgsys@hotmail.com>
kusano 7d535a
says conforms to the VB guidelines, and that solves the problem of not
kusano 7d535a
knowing the uncompressed size by storing it at the end of the file:
kusano 7d535a
kusano 7d535a
'Calling the functions:
kusano 7d535a
'bracket meaning: <parameter> [optional] {Range of possible values}</parameter>
kusano 7d535a
'Call subCompressFile(<path compress="" filename="" to="" with=""> [, </path>
kusano 7d535a
filename to write to>, [level of compression {1..9}]])
kusano 7d535a
'Call subUncompressFile(<path compress="" filename="" to="" with="">)</path>
kusano 7d535a
kusano 7d535a
Option Explicit
kusano 7d535a
Private lngpvtPcnSml As Long 'Stores value for 'lngPercentSmaller'
kusano 7d535a
Private Const SUCCESS As Long = 0
kusano 7d535a
Private Const strFilExt As String = ".cpr"
kusano 7d535a
Private Declare Function lngfncCpr Lib "zlib.dll" Alias "compress2" (ByRef
kusano 7d535a
dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long,
kusano 7d535a
ByVal level As Integer) As Long
kusano 7d535a
Private Declare Function lngfncUcp Lib "zlib.dll" Alias "uncompress" (ByRef
kusano 7d535a
dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long)
kusano 7d535a
As Long
kusano 7d535a
kusano 7d535a
Public Sub subCompressFile(ByVal strargOriFilPth As String, Optional ByVal
kusano 7d535a
strargCprFilPth As String, Optional ByVal intLvl As Integer = 9)
kusano 7d535a
    Dim strCprPth As String
kusano 7d535a
    Dim lngOriSiz As Long
kusano 7d535a
    Dim lngCprSiz As Long
kusano 7d535a
    Dim bytaryOri() As Byte
kusano 7d535a
    Dim bytaryCpr() As Byte
kusano 7d535a
    lngOriSiz = FileLen(strargOriFilPth)
kusano 7d535a
    ReDim bytaryOri(lngOriSiz - 1)
kusano 7d535a
    Open strargOriFilPth For Binary Access Read As #1
kusano 7d535a
        Get #1, , bytaryOri()
kusano 7d535a
    Close #1
kusano 7d535a
    strCprPth = IIf(strargCprFilPth = "", strargOriFilPth, strargCprFilPth)
kusano 7d535a
'Select file path and name
kusano 7d535a
    strCprPth = strCprPth & IIf(Right(strCprPth, Len(strFilExt)) =
kusano 7d535a
strFilExt, "", strFilExt) 'Add file extension if not exists
kusano 7d535a
    lngCprSiz = (lngOriSiz * 1.01) + 12 'Compression needs temporary a bit
kusano 7d535a
more space then original file size
kusano 7d535a
    ReDim bytaryCpr(lngCprSiz - 1)
kusano 7d535a
    If lngfncCpr(bytaryCpr(0), lngCprSiz, bytaryOri(0), lngOriSiz, intLvl) =
kusano 7d535a
SUCCESS Then
kusano 7d535a
        lngpvtPcnSml = (1# - (lngCprSiz / lngOriSiz)) * 100
kusano 7d535a
        ReDim Preserve bytaryCpr(lngCprSiz - 1)
kusano 7d535a
        Open strCprPth For Binary Access Write As #1
kusano 7d535a
            Put #1, , bytaryCpr()
kusano 7d535a
            Put #1, , lngOriSiz 'Add the the original size value to the end
kusano 7d535a
(last 4 bytes)
kusano 7d535a
        Close #1
kusano 7d535a
    Else
kusano 7d535a
        MsgBox "Compression error"
kusano 7d535a
    End If
kusano 7d535a
    Erase bytaryCpr
kusano 7d535a
    Erase bytaryOri
kusano 7d535a
End Sub
kusano 7d535a
kusano 7d535a
Public Sub subUncompressFile(ByVal strargFilPth As String)
kusano 7d535a
    Dim bytaryCpr() As Byte
kusano 7d535a
    Dim bytaryOri() As Byte
kusano 7d535a
    Dim lngOriSiz As Long
kusano 7d535a
    Dim lngCprSiz As Long
kusano 7d535a
    Dim strOriPth As String
kusano 7d535a
    lngCprSiz = FileLen(strargFilPth)
kusano 7d535a
    ReDim bytaryCpr(lngCprSiz - 1)
kusano 7d535a
    Open strargFilPth For Binary Access Read As #1
kusano 7d535a
        Get #1, , bytaryCpr()
kusano 7d535a
    Close #1
kusano 7d535a
    'Read the original file size value:
kusano 7d535a
    lngOriSiz = bytaryCpr(lngCprSiz - 1) * (2 ^ 24) _
kusano 7d535a
              + bytaryCpr(lngCprSiz - 2) * (2 ^ 16) _
kusano 7d535a
              + bytaryCpr(lngCprSiz - 3) * (2 ^ 8) _
kusano 7d535a
              + bytaryCpr(lngCprSiz - 4)
kusano 7d535a
    ReDim Preserve bytaryCpr(lngCprSiz - 5) 'Cut of the original size value
kusano 7d535a
    ReDim bytaryOri(lngOriSiz - 1)
kusano 7d535a
    If lngfncUcp(bytaryOri(0), lngOriSiz, bytaryCpr(0), lngCprSiz) = SUCCESS
kusano 7d535a
Then
kusano 7d535a
        strOriPth = Left(strargFilPth, Len(strargFilPth) - Len(strFilExt))
kusano 7d535a
        Open strOriPth For Binary Access Write As #1
kusano 7d535a
            Put #1, , bytaryOri()
kusano 7d535a
        Close #1
kusano 7d535a
    Else
kusano 7d535a
        MsgBox "Uncompression error"
kusano 7d535a
    End If
kusano 7d535a
    Erase bytaryCpr
kusano 7d535a
    Erase bytaryOri
kusano 7d535a
End Sub
kusano 7d535a
Public Property Get lngPercentSmaller() As Long
kusano 7d535a
    lngPercentSmaller = lngpvtPcnSml
kusano 7d535a
End Property