|
Overview
|
This project started when I was trying to build up the indexes for the vbAccelerator site.
I had a program to search through all the HTML files which make up the site, and
this could pick out the ZIP files linked to by the pages. But how to determine which
projects these ZIP files contained? You need a way to read ZIP files. As usual with VB
there are no library routines or standard controls available for ZIP files, so you need
another way.
Luckily there is one, and its free! If you have a look at the Acknowledgements in the
WinZip helpfile, you will find that the compression code for ZIP files is actually implemented
using free code from the Info-ZIP group:
|
"WinZip incorporates compression code by the Info-ZIP group, which is used with their permission. Special thanks to the entire Info-Zip group, in particular to Jean-loup Gailly, Greg Roelofs, and Mark Adler. The original Info-Zip sources are freely available from CompuServe in the pcprog forum and by anonymous ftp from the Internet site ftp.uu.net:/pub/archiving/zip. We will also, upon request, mail you the Info-Zip sources if you send a self-addressed stamped envelope to the address in the WinZip "About" dialog box."
|
|
Info-ZIP's purpose is to "provide free, portable, high-quality versions of the Zip and UnZip compressor-archiver utilities that are compatible with the DOS-based PKZIP by PKWARE, Inc." -
and they do an excellent job at it. Their code runs on almost every OS ever devised (Tandem NSK?) and is
also part of many products such as WinZip, PGP, the third party ActiveX control DynaZip and so on.
The licensing arrangment for this DLL is classic freeware too: you cannot sell the product,
but you are free to use it as you wish provided that (1) the customer does not believe Unzip is
being sold and (2) the customer receives all normal documentation.
|
Using the Info-ZIP Unzip DLL from VB
|
The task of using Info-ZIP in VB is greatly assisted by two things:
- Info-ZIP being good enough to package their code into precompiled Win32 DLLs (note that
these aren't ActiveX DLLs).
- the work of coders Raymond L. King, Christian Spieler, Mike Le Voi and Mike White
who contributed Visual Basic modules to the Info-ZIP project.
Unfortunately, there are two problems directly related to this. The first is
that the Win32 DLLs from Info-ZIP have a habit of mutating radically and incompatibly
between versions. The second is that the VB modules supplied, although useful, are
very difficult to reuse because you have to pick out the code from the presentation
in the sample.
Which is where vbAccelerator comes in! Luckily we can deal with both of these problems.
|
1) The Curious Case of the Mad DLLs
|
One problem with using the Info-ZIP compiled DLL as-is is that the precompiled binaries
supplied by the Info-ZIP group are for courtesy only, and the Win32 rules for DLL have
not been followed, i.e. if you create a DLL which is not
compatible with the previous version then you should change the name so you don't stop
existing applications from working.
For example, the function for unzipping files was actually
renamed from windll_unzip to
Wiz_SingleEntryUnzip between versions! No doubt Info-ZIP have their reasons for
this but if you had production code out there that used the older version then you would
be stuffed - there would be no choice but to ship an entirely new version of your code.
You can prevent this happening to you by simply renaming the DLLs downloaded from
the Info-ZIP site. In this case, I've renamed the latest versions of the Info-ZIP DLLs
as follows:
When/if future versions appear, and it requires code to be changed, I will create new
versions of the classes and rename the new versions of the DLL to the next number in the
sequence, for example, vbuzip11.dll.
Note that because these DLLs are Win32 DLLs and not ActiveX DLLs, they should be installed
into the Windows\System directory of the target machine.
|
2) Code for Tommorrow - Building for Reuse
|
The Info-ZIP DLLs are somewhat alarming in that they have that C-coders "less is more"
type of interface. For example, the Unzip DLL really has only one method, although this
is complemented by some nasty callback functions, a structure with lots of members
to fill in and 6 or seven parameters to cover all cases. Whilst this succinct model
provides access to everything you need, its not so easy to use.
An easy way to manage this sort of functionality is to write a class wrapper which
exposes the items in a more verbose but clearer manner. The result is a class
with 4 events, 25 properties and 3 methods.
|
Try the Code
|
|
Back to top Back to Library Source Code Back to Source Code
|
|
  |