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