Calling LoadLibrary() on a 16-bit DLL

ID: Q123731


The information in this article applies to:
  • Microsoft Win32s versions 1.3, 1.30a, 1.3c


SUMMARY

In Win32-based applications, LoadLibrary() returns an HINSTANCE and GetLastError() is used to determine the error. If HINSTANCE is NULL, the DLL was not successfully loaded. If the HINSTANCE is not null, the DLL was loaded and the usage count was incremented; however, you may still see that the last error was set if the DLL is a 16-bit DLL.

NOTE: At this point, the DLL is loaded and the usage count is incremented. Call FreeLibrary() to unload the DLL.


MORE INFORMATION

In order to see all possible error returns, you'll need to call SetLastError(0) before calling LoadLibrary(). If HINSTANCE is not NULL and GetLastError() is ERROR_BAD_EXE_FORMAT, the DLL is a 16-bit DLL. You can access the DLL resources and/or printer APIs from your Win32-based application.

To call routines in the 16-bit DLL, you should load and call the DLL via the Universal Thunk. This increments the usage count again. Later, you can use FreeLibrary() to free the DLL from the 16-bit code, but this won't unload the DLL from memory unless you already called FreeLibrary() from the 32-bit code. This is because the usage count is not zero. We recommend you call FreeLibrary() from the 32-bit code after the DLL is loaded by the 16-bit code, so the DLL isn't unloaded and then reloaded.


REFERENCES

For more information on how to get resources from a 16-bit DLL, please see the following article in the Microsoft Knowledge Base:

Q105761 Getting Resources from 16-bit DLLs Under Win32s
For more information on Universal Thunk, please see Chapter 4 of the Win32s Programmer's Reference.

Additional query words:

Keywords : kbWin32s
Version : WINDOWS:1.3,1.30a,1.3c
Platform : WINDOWS
Issue type :


Last Reviewed: January 14, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.