WINE/WINDOWS 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, Wine implemetation 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 Credits ------- Based upon various messages on wine-devel especially by Ulrich Weigand. Adapted by Michele Petrovski and Klaas van Gend.