SUMMARY
A Win32-based application running under Win32s can load a 16-bit dynamic-
link library (DLL) using LoadLibrary() and free it with FreeLibrary(). This
behavior is allowed primarily so that GetProcAddress() can be called for
printer driver application programming interfaces (APIs).
Calling FindResource() with the handle that LoadLibrary() returns to the
DLL that it just loaded results in an access violation. However, the
Win32-based application can use the following APIs with this handle
LoadBitmap
LoadCursor
LoadIcon
because this results in USER.EXE (16-bit) making calls to KERNEL.EXE.
If you go through a Universal Thunk to get raw resource data from the
16-bit DLL, it is necessary to convert the resource to 32-bit format,
because the resource format is different from the 16-bit format. The 32-bit
format is described in the Software Development Kit (SDK) file
DOC\SDK\FILEFRMT\RESFMT.TXT.
To determine whether a DLL is a 32-bit or 16-bit DLL, check the DLL header.
The DWORD at offset 0x3C indicates where to look for the PE signature.
Compare the 4 bytes there to 0x00004550 to determine whether this is a
Win32 DLL.