symbian-qemu-0.9.1-12/zlib-1.2.3/old/visual-basic.txt
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 See below some functions declarations for Visual Basic.
       
     2 
       
     3 Frequently Asked Question:
       
     4 
       
     5 Q: Each time I use the compress function I get the -5 error (not enough
       
     6    room in the output buffer).
       
     7 
       
     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.
       
    12 
       
    13 
       
    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
       
    17 
       
    18 Got the answer! (I haven't had time to check this but it's what I got, and
       
    19 looks correct):
       
    20 
       
    21 He has the following routines working:
       
    22         compress
       
    23         uncompress
       
    24         gzopen
       
    25         gzwrite
       
    26         gzread
       
    27         gzclose
       
    28 
       
    29 Declares follow: (Quoted from Carlos Rios <c_rios@sonda.cl>, in Vb4 form)
       
    30 
       
    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
       
    34         As Long) As Integer
       
    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)
       
    42         As Integer
       
    43 Declare Function gzwrite Lib "ZLIB.DLL" (ByVal file As
       
    44         Long, ByVal uncompr As String, ByVal uncomprLen As Integer)
       
    45         As Integer
       
    46 Declare Function gzclose Lib "ZLIB.DLL" (ByVal file As
       
    47         Long) As Integer
       
    48 #Else
       
    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
       
    65 #End If
       
    66 
       
    67 -Jon Caruana
       
    68 jon-net@usa.net
       
    69 Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member
       
    70 
       
    71 
       
    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:
       
    75 
       
    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>)
       
    81 
       
    82 Option Explicit
       
    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)
       
    91 As Long
       
    92 
       
    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
       
    96     Dim lngOriSiz As Long
       
    97     Dim lngCprSiz As Long
       
    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()
       
   104     Close #1
       
   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) =
       
   113 SUCCESS Then
       
   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
       
   119 (last 4 bytes)
       
   120         Close #1
       
   121     Else
       
   122         MsgBox "Compression error"
       
   123     End If
       
   124     Erase bytaryCpr
       
   125     Erase bytaryOri
       
   126 End Sub
       
   127 
       
   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()
       
   138     Close #1
       
   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
       
   147 Then
       
   148         strOriPth = Left(strargFilPth, Len(strargFilPth) - Len(strFilExt))
       
   149         Open strOriPth For Binary Access Write As #1
       
   150             Put #1, , bytaryOri()
       
   151         Close #1
       
   152     Else
       
   153         MsgBox "Uncompression error"
       
   154     End If
       
   155     Erase bytaryCpr
       
   156     Erase bytaryOri
       
   157 End Sub
       
   158 Public Property Get lngPercentSmaller() As Long
       
   159     lngPercentSmaller = lngpvtPcnSml
       
   160 End Property