Windows ® 95
Frequently Asked Questions
Q  Is it safe to use undocumented functions? Will they work in future
versions of Windows?
A  There are no guarantees with undocumented functions. If safety is a
concern for you, you should stick to the documented API.
Q  Does function XXX work on version XXX of Windows?
A  I have no idea. Try it out yourself.
Q  Why doesn't function XXX work with version XXX of Microsoft
Internet Explorer?
A  Microsoft often updates operating system DLLs when releasing new
versions of Internet Explorer. As with regular operating system upgrades,
there is no guarantee that a particular undocumented function will still
work with the latest versions.
Q  Whenever I try to use an undocumented function my compiler returns
the error: Call to undefined function 'XXX'. What is the problem?
A  You must include a header file with prototypes for the functions
before you can use them. You can obtain a header file from the
downloads page.
Q  Whenever I try to link a program that uses undocumented functions
my linker returns the error: Unresolved external 'XXX' referenced from
module XXX. What is the problem?
A  You need to include an import library in your project with import
definitions for the functions. If you use Borland C++, you can obtain an
import library from the downloads page. Some versions of Microsoft
Visual C++ already have a working import library (shell32.lib), but they
apparently removed support for undocumented functions in version 6 (that
means you'll probably have to create your own).
Q  My program compiles and links without any errors, but when I run it I
get the error: The procedure entry point XXX could not be located in
dynamic link library XXX. What is the problem?
A  You are attempting to import a function by name rather than by
ordinal. Either your import library was created incorrectly, or your linker
options are incorrect. In Borland C++, make sure the option 'Allow import
by ordinal' is enabled. Also make sure you're using the the library from the
downloads page - some versions of Borland C++ include a broken import
library which will link ok but won't run. Finally, if you're using Borland
CBuilder, you have to use the old linker (TLINK32) rather than ILINK32
which doesn't support importing by ordinal.
Q  My program compiles and links without any errors, but when I run it I
get the error: The ordinal XXX could not be located in the dynamic link
library XXX. What is the problem?
A  Either your import library was created incorrectly, or the operating
system on which you are running does not support that function. The
Microsoft Visual C++ library apparently includes many functions that are
only available on Windows NT. If you try and use them on Windows 95
your app won't run. If you really need to use them you should link to them
at run-time with GetProcAddress and check whether they are available.
Q  Why have you not got any documentation for function XXX?
A  I only document the functions that I think are useful and/or interesting.
You are welcome to point out any interesting functions that you think I
may have missed, but there is no guarantee that I'll be enthusiastic enough
to do anything with them. It is also quite possible that I have already
documentated the function but haven't yet had time to add it to the site.
Q  If I provide you with the documentation for a function, will you add it
to your web page?
A  No. I won't document anything on this site until I have had time to
examine the function myself and determine exactly how it works.
Q  How do you find out all this information about undocumented
A  With a disassembler and the symbol files included with Windows NT.
There are a number of good disassemblers and debuggers available, but I
haven't had much experience using any of them so I can't make any
particular recommendations. It does help if your disassembler has built-in
support for symbol files though.
xxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Copyright © 1998-1999 James Holderness. All Rights Reserved
Page last modified: November 3rd, 1999