1 See below some functions declarations for Visual Basic.
3 Frequently Asked Question:
5 Q: Each time I use the compress function I get the -5 error (not enough
6 room in the output buffer).
8 A: Make sure that the length of the compressed buffer is passed by
9 reference ("as any"), not by value ("as long"). Also check that
10 before the call of compress this length is equal to the total size of
11 the compressed buffer and not zero.
14 From: "Jon Caruana" <jon-net@usa.net>
15 Subject: Re: How to port zlib declares to vb?
16 Date: Mon, 28 Oct 1996 18:33:03 -0600
18 Got the answer! (I haven't had time to check this but it's what I got, and
21 He has the following routines working:
29 Declares follow: (Quoted from Carlos Rios <c_rios@sonda.cl>, in Vb4 form)
31 #If Win16 Then 'Use Win16 calls.
32 Declare Function compress Lib "ZLIB.DLL" (ByVal compr As
33 String, comprLen As Any, ByVal buf As String, ByVal buflen
35 Declare Function uncompress Lib "ZLIB.DLL" (ByVal uncompr
36 As String, uncomprLen As Any, ByVal compr As String, ByVal
37 lcompr As Long) As Integer
38 Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As
39 String, ByVal mode As String) As Long
40 Declare Function gzread Lib "ZLIB.DLL" (ByVal file As
41 Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
43 Declare Function gzwrite Lib "ZLIB.DLL" (ByVal file As
44 Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
46 Declare Function gzclose Lib "ZLIB.DLL" (ByVal file As
49 Declare Function compress Lib "ZLIB32.DLL"
50 (ByVal compr As String, comprLen As Any, ByVal buf As
51 String, ByVal buflen As Long) As Integer
52 Declare Function uncompress Lib "ZLIB32.DLL"
53 (ByVal uncompr As String, uncomprLen As Any, ByVal compr As
54 String, ByVal lcompr As Long) As Long
55 Declare Function gzopen Lib "ZLIB32.DLL"
56 (ByVal file As String, ByVal mode As String) As Long
57 Declare Function gzread Lib "ZLIB32.DLL"
58 (ByVal file As Long, ByVal uncompr As String, ByVal
59 uncomprLen As Long) As Long
60 Declare Function gzwrite Lib "ZLIB32.DLL"
61 (ByVal file As Long, ByVal uncompr As String, ByVal
62 uncomprLen As Long) As Long
63 Declare Function gzclose Lib "ZLIB32.DLL"
64 (ByVal file As Long) As Long
69 Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member
72 Here is another example from Michael <michael_borgsys@hotmail.com> that he
73 says conforms to the VB guidelines, and that solves the problem of not
74 knowing the uncompressed size by storing it at the end of the file:
76 'Calling the functions:
77 'bracket meaning: <parameter> [optional] {Range of possible values}
78 'Call subCompressFile(<path with filename to compress> [, <path with
79 filename to write to>, [level of compression {1..9}]])
80 'Call subUncompressFile(<path with filename to compress>)
83 Private lngpvtPcnSml As Long 'Stores value for 'lngPercentSmaller'
84 Private Const SUCCESS As Long = 0
85 Private Const strFilExt As String = ".cpr"
86 Private Declare Function lngfncCpr Lib "zlib.dll" Alias "compress2" (ByRef
87 dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long,
88 ByVal level As Integer) As Long
89 Private Declare Function lngfncUcp Lib "zlib.dll" Alias "uncompress" (ByRef
90 dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long)
93 Public Sub subCompressFile(ByVal strargOriFilPth As String, Optional ByVal
94 strargCprFilPth As String, Optional ByVal intLvl As Integer = 9)
95 Dim strCprPth As String
98 Dim bytaryOri() As Byte
99 Dim bytaryCpr() As Byte
100 lngOriSiz = FileLen(strargOriFilPth)
101 ReDim bytaryOri(lngOriSiz - 1)
102 Open strargOriFilPth For Binary Access Read As #1
103 Get #1, , bytaryOri()
105 strCprPth = IIf(strargCprFilPth = "", strargOriFilPth, strargCprFilPth)
106 'Select file path and name
107 strCprPth = strCprPth & IIf(Right(strCprPth, Len(strFilExt)) =
108 strFilExt, "", strFilExt) 'Add file extension if not exists
109 lngCprSiz = (lngOriSiz * 1.01) + 12 'Compression needs temporary a bit
110 more space then original file size
111 ReDim bytaryCpr(lngCprSiz - 1)
112 If lngfncCpr(bytaryCpr(0), lngCprSiz, bytaryOri(0), lngOriSiz, intLvl) =
114 lngpvtPcnSml = (1# - (lngCprSiz / lngOriSiz)) * 100
115 ReDim Preserve bytaryCpr(lngCprSiz - 1)
116 Open strCprPth For Binary Access Write As #1
117 Put #1, , bytaryCpr()
118 Put #1, , lngOriSiz 'Add the the original size value to the end
122 MsgBox "Compression error"
128 Public Sub subUncompressFile(ByVal strargFilPth As String)
129 Dim bytaryCpr() As Byte
130 Dim bytaryOri() As Byte
131 Dim lngOriSiz As Long
132 Dim lngCprSiz As Long
133 Dim strOriPth As String
134 lngCprSiz = FileLen(strargFilPth)
135 ReDim bytaryCpr(lngCprSiz - 1)
136 Open strargFilPth For Binary Access Read As #1
137 Get #1, , bytaryCpr()
139 'Read the original file size value:
140 lngOriSiz = bytaryCpr(lngCprSiz - 1) * (2 ^ 24) _
141 + bytaryCpr(lngCprSiz - 2) * (2 ^ 16) _
142 + bytaryCpr(lngCprSiz - 3) * (2 ^ 8) _
143 + bytaryCpr(lngCprSiz - 4)
144 ReDim Preserve bytaryCpr(lngCprSiz - 5) 'Cut of the original size value
145 ReDim bytaryOri(lngOriSiz - 1)
146 If lngfncUcp(bytaryOri(0), lngOriSiz, bytaryCpr(0), lngCprSiz) = SUCCESS
148 strOriPth = Left(strargFilPth, Len(strargFilPth) - Len(strFilExt))
149 Open strOriPth For Binary Access Write As #1
150 Put #1, , bytaryOri()
153 MsgBox "Uncompression error"
158 Public Property Get lngPercentSmaller() As Long
159 lngPercentSmaller = lngpvtPcnSml