Who's Afraid Of A DLL?
By Eric Pearson
When I first started moving from DOS to Windows programming,
the term "DLL" was pretty intimidating. But as I
learned more about them, and what they could do for my programs,
the mystery -- and the fear -- started to fade. Now they have
become an absolutely indispensable part of my Windows
programming toolbox, and they should be part of yours.
Just saying that DLL stands for "Dynamic Link
Library" isn't very helpful. That last word --
Library -- is by far the most important.
Important Point #1: A DLL is simply a file that contains one
or more pre-compiled functions. I was familiar with
pre-compiling my own PB/DOS functions into Unit files, but DLLs
take the "library" concept a couple of steps further.
A couple of very powerful steps!
Important Point #2: DLLs are the fastest, most compact, and
most efficient form of Windows library file. The Microsoft
Windows operating system itself is based almost entirely on
DLLs! In fact, Windows ME and XP rely on more "system
DLLs" than ever before. If you want raw, high-efficiency
computing power, you are probably wasting your time with
ActiveX, OLE, COM, OCX and all of those other three-letter
acronyms. They all rely on DLL technology "under the
hood" so they'll never be more efficient than using DLLs
directly.
Important Point #3: Your PowerBASIC PB/CC, PB/Win, and PB/DLL
programs can use DLLs that have been created by any almost
Windows compiler, just as if they had been compiled by
PowerBASIC. That means that thousands and thousands of
sophisticated, thoroughly field-tested functions are available
right now, for use in your PowerBASIC apps.
Important Point #4: If you use PB/Win or PB/DLL to create a
DLL, virtually any computer language can use it. The DLLs that
you create with PowerBASIC can be used by Visual Basic, C++,
Delphi, and so on. DLLs are the one standard that virtually
everybody supports! And many programs can use DLLs too,
to provide "extension" functions.
Important Point #5: There's nothing magic -- or difficult --
about using a function in a DLL. You simply use the PowerBASIC
DECLARE statement to tell the compiler that a certain function
is located in a certain DLL file. Then you can use the function
almost as if was part of the PowerBASIC language itself. If you
put the DECLARE statements in an #INCLUDE file, it's almost like
using a file that contains the source code for the
functions!
Important Point #6: DLLs save disk space, reduce load times,
and reduce download times. The first two words of "Dynamic
Link Library" describe another very powerful aspect of
DLLs. Your program "links" to them at runtime, not at
compile time. While it is running, an EXE file sees a DLL as if
it was part of the EXE, even though it is a separate file. That
means that if you have a DLL that contains some multi-purpose
functions, many different programs can use one copy of the DLL
file. That can result in significantly smaller programs, which
is especially important if you want people to download your
programs from the internet.
Important Point #7: DLLs are memory-efficient. If two or more
programs are using a certain DLL, only one copy of the
DLL is actually loaded into memory. Each program will have its
own set of DLL variables, and those do take up a small amount of
memory, but the DLL itself will be loaded only once, and that
can result in a significant reduction in the amount of memory
that your programs use. (Don't worry, programs will never
conflict with each other because Windows automatically keeps
them from "seeing" each other.)
Important Point #8: DLLs can provide powerful new
"variable scope" options. You're probably familiar
PowerBASIC's GLOBAL, LOCAL, and STATIC variables. GLOBAL
variables are visible to every SUB and FUNCTION in your program,
while LOCAL and STATIC variables are visible only to individual
SUBs and FUNCTIONs. Well, DLLs add an entirely new level of
variable scoping to your programs. The variables in a DLL are
completely isolated from the rest of your program, so the GLOBAL
variables in a DLL are really isolated "module level"
variables that can't be seen by any other parts of your program.
And a DLL can't see your main program's GLOBALs, either.
Important Point #9: Managing DLL files doesn't have to be a
nightmare! We have all heard about "DLL Hell": DLLs
being incorrectly replaced by older versions, and programs that
fail because the wrong version of a DLL was installed. Virtually
100% of those problems can be eliminated if you simply store
your program's DLLs in your program's own directory. If you put
them in the "Windows System" directory (as many
programs do) you are asking for trouble. But the first
place that Windows looks for DLLs is in your program's default
directory, so if you put them there, you'll avoid all of those
headaches.
Important Point #10 is that there are lots of other
important points! Once you start using them, you'll see that
DLLs provide many different, subtle advantages. You'll reduce
the amount of time it takes to compile large programs because
you won't have to recompile the whole thing every time. You can
update your program by changing a single DLL instead of
replacing a huge, monolithic file. And on and on!
The more you use DLLs the more advantages you'll find. And
the more Powerful your PowerBASIC programs will become!
And now a brief word from our sponsor...
Eric Pearson is the President of Perfect Sync, Inc.
Perfect Sync provides DLL-based development tools to
PowerBASIC programmers, including SQL Tools, Graphics Tools, and
Console Tools. For more information about how DLL-based
development tools can add even more Power to your PowerBASIC
programs, visit
http://perfectsync.com/DevelopmentTools.htm.
|