A key reason for the version incompatibility is the structure of the DLL file.
A common and troublesome problem occurs when a newly installed program overwrites a working system DLL with an earlier, incompatible version.
Early examples of this were the libraries for Windows 3.1: Microsoft-created libraries that third party publishers would distribute with their software, but each distributing the version they developed with rather than the most recent version.
Before Windows 2000, Windows was vulnerable to this because the COM class table was shared across all users and processes.
Only one COM object in one DLL/EXE could be declared as having a specific global COM Class ID on a system.
By placing this code in a DLL, all the applications on the system can use it without using more memory.
This contrasts with static libraries, which are functionally similar but copy the code directly into the application.
particularly legacy 16-bit editions which all run in a single memory space.
DLL Hell can manifest itself in many different ways in which applications do not launch or work correctly.
Shared libraries allow common code to be bundled into a wrapper, the DLL, and used by any application software on the system without loading multiple copies into memory.