
                              Wine Documentation                               
Prev                          Chapter 7. Overview                          Next
-------------------------------------------------------------------------------

WINE/WINDOWS DLLs

Based upon various messages on wine-devel especially by Ulrich Weigand. Adapted
by Michele Petrovski and Klaas van Gend.

(Extracted from wine/documentation/dlls)

This document mainly deals with the status of current DLL support by Wine. The
Wine ini file currently supports settings to change the load order of DLLs. The
load order depends on several issues, which results in different settings for
various DLLs.

Pros of Native DLLs

Native DLLs of course guarantee 100% compatibility for routines they implement.
For example, using the native USER DLL would maintain a virtually perfect and
Windows 95-like look for window borders, dialog controls, and so on. Using the
built-in WINE version of this library, on the other hand, would produce a
display that does not precisely mimic that of Windows 95. Such subtle
differences can be engendered in other important DLLs, such as the common
controls library COMMCTRL or the common dialogs library COMMDLG, when built-in
WINE DLLs outrank other types in load order.

More significant, less aesthetically-oriented problems can result if the
built-in WINE version of the SHELL DLL is loaded before the native version of
this library. SHELL contains routines such as those used by installer utilities
to create desktop shortcuts. Some installers might fail when using WINE's
built-in SHELL.

Cons of Native DLLs

Not every application performs better under native DLLs. If a library tries to
access features of the rest of the system that are not fully implemented in
Wine, the native DLL might work much worse than the corresponding built-in one,
if at all. For example, the native Windows GDI library must be paired with a
Windows display driver, which of course is not present under Intel Unix and
WINE.

Finally, occassionally built-in WINE DLLs implement more features than the
corresponding native Windows DLLs. Probably the most important example of such
behavior is the integration of Wine with X provided by WINE's built-in USER
DLL. Should the native Windows USER library take load-order precedence, such
features as the ability to use the clipboard or drag-and- drop between Wine
windows and X windows will be lost.

Deciding Between Native and Built-In DLLs

Clearly, there is no one rule-of-thumb regarding which load-order to use. So,
you must become familiar with:

*what specific DLLs do
   
*which other DLLs or features a given library interacts with
   

and use this information to make a case-by-case decision.

Load Order for DLLs

Using the DLL sections from the wine configuration file, the load order can be
tweaked to a high degree. In general it is advised not to change the settings
of the configuration file. The default configuration specifies the right load
order for the most important DLLs.

The default load order follows this algorithm: for all DLLs which have a
fully-functional Wine implementation, or where the native DLL is known not to
work, the built-in library will be loaded first. In all other cases, the native
DLL takes load-order precedence.

The DefaultLoadOrder from the [DllDefaults] section specifies for all DLLs
which version to try first. See manpage for explanation of the arguments.

The [DllOverrides] section deals with DLLs, which need a different-from-default
treatment.

The [DllPairs] section is for DLLs, which must be loaded in pairs. In general,
these are DLLs for either 16-bit or 32-bit applications. In most cases in
Windows, the 32-bit version cannot be used without its 16-bit counterpart. For
WINE, it is customary that the 16-bit implementations rely on the 32-bit
implementations and cast the results back to 16-bit arguments. Changing
anything in this section is bound to result in errors.

For the future, the Wine implementation of Windows DLL seems to head towards
unifying the 16 and 32 bit DLLs wherever possible, resulting in larger DLLs.
They are stored in the dlls/ subdirectory using the 16-bit name. For large
DLLs, a split might be discussed.

Understanding What DLLs Do

The following list briefly describes each of the DLLs commonly found in Windows
whose load order may be modified during the configuration and compilation of
WINE.

(See also ./DEVELOPER-HINTS or the dlls/ subdirectory to see which DLLs are
currently being rewritten for wine)
ADVAPI32.DLL:      32-bit application advanced programming interfaces          
                   like crypto, systeminfo, security and eventlogging          
AVIFILE.DLL:       32-bit application programming interfaces for the           
                   Audio Video Interleave (AVI) Windows-specific               
                   Microsoft audio-video standard                              
COMMCTRL.DLL:      16-bit common controls                                      
COMCTL32.DLL:      32-bit common controls                                      
COMDLG32.DLL:      32-bit common dialogs                                       
COMMDLG.DLL:       16-bit common dialogs                                       
COMPOBJ.DLL:       OLE 16- and 32-bit compatibility libraries                  
CRTDLL.DLL:        Microsoft C runtime                                         
DCIMAN.DLL:        16-bit                                                      
DCIMAN32.DLL:      32-bit display controls                                     
DDEML.DLL:         DDE messaging                                               
D3D*.DLL           DirectX/Direct3D drawing libraries                          
DDRAW.DLL:         DirectX drawing libraries                                   
DINPUT.DLL:        DirectX input libraries                                     
DISPLAY.DLL:       Display libraries                                           
DPLAY.DLL, DPLAYX.DLL:  DirectX playback libraries                             
DSOUND.DLL:        DirectX audio libraries                                     
GDI.DLL:           16-bit graphics driver interface                            
GDI32.DLL:         32-bit graphics driver interface                            
IMAGEHLP.DLL:      32-bit IMM API helper libraries (for PE-executables)        
IMM32.DLL:         32-bit IMM API                                              
IMGUTIL.DLL:                                                                   
KERNEL32.DLL       32-bit kernel DLL                                           
KEYBOARD.DLL:      Keyboard drivers                                            
LZ32.DLL:          32-bit Lempel-Ziv or LZ file compression                    
                   used by the installshields (???).                           
LZEXPAND.DLL:      LZ file expansion; needed for Windows Setup                 
MMSYSTEM.DLL:      Core of the Windows multimedia system                       
MOUSE.DLL:         Mouse drivers                                               
MPR.DLL:           32-bit Windows network interface                            
MSACM.DLL:         Core of the Addressed Call Mode or ACM system               
MSACM32.DLL:       Core of the 32-bit ACM system                               
                   Audio Compression Manager ???                               
MSNET32.DLL        32-bit network APIs                                         
MSVFW32.DLL:       32-bit Windows video system                                 
MSVIDEO.DLL:       16-bit Windows video system                                 
OLE2.DLL:          OLE 2.0 libraries                                           
OLE32.DLL:         32-bit OLE 2.0 components                                   
OLE2CONV.DLL:      Import filter for graphics files                            
OLE2DISP.DLL, OLE2NLS.DLL: OLE 2.1 16- and 32-bit interoperability             
OLE2PROX.DLL:      Proxy server for OLE 2.0                                    
OLE2THK.DLL:       Thunking for OLE 2.0                                        
OLEAUT32.DLL       32-bit OLE 2.0 automation                                   
OLECLI.DLL:        16-bit OLE client                                           
OLECLI32.DLL:      32-bit OLE client                                           
OLEDLG.DLL:        OLE 2.0 user interface support                              
OLESVR.DLL:        16-bit OLE server libraries                                 
OLESVR32.DLL:      32-bit OLE server libraries                                 
PSAPI.DLL:         Proces Status API libraries                                 
RASAPI16.DLL:      16-bit Remote Access Services libraries                     
RASAPI32.DLL:      32-bit Remote Access Services libraries                     
SHELL.DLL:         16-bit Windows shell used by Setup                          
SHELL32.DLL:       32-bit Windows shell (COM object?)                          
TAPI/TAPI32/TAPIADDR:  Telephone API (for Modems)                              
W32SKRNL:          Win32s Kernel ? (not in use for Win95 and up!)              
WIN32S16.DLL:      Application compatibility for Win32s                        
WIN87EM.DLL:       80387 math-emulation libraries                              
WINASPI.DLL:       Advanced SCSI Peripheral Interface or ASPI libraries        
WINDEBUG.DLL       Windows debugger                                            
WINMM.DLL:         Libraries for multimedia thunking                           
WING.DLL:          Libraries required to "draw" graphics                       
WINSOCK.DLL:       Sockets APIs                                                
WINSPOOL.DLL:      Print spooler libraries                                     
WNASPI32.DLL:      32-bit ASPI libraries                                       
WSOCK32.DLL:       32-bit sockets APIs                                         
                                                                               
-------------------------------------------------------------------------------
Prev                                  Home                                 Next
Module Overview                        Up                         Debug Logging
