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