DLL Hell et Dependency Walker
Avant la venue des Framework .Net, nous étions confrontés à l’enfer des DLL ou Dynamic Link Libraries. Sous Windows, vous n’avez pas la possibilité de charger en mémoire deux versions de DLL disposant du même nom. Du coup, les éditeurs en étaient venus parfois à modifier les DLL système fournies par Windows pour pouvoir faire fonctionner leurs exécutables. J’ai connu ça sous Windows NT 4, avec un logiciel de partage de fax signé Symantec. Pour que le système retrouve un fonctionnement « normal », il fallait désinstaller le logiciel !
Tous les logiciels développés en C ou C++ sous Windows continuent d’utiliser les DLL. la règle est simple. Sont chargées les librairies présentes dans le répertoire de l’exécutable et, à défaut dans les répertoires listés par la variable PATH du système Windows. Par défaut, cette variable contient les répertoires :
- C:\WINDOWS
- C:\WINDOWS\SYSTEM32
Je vous incite d’ailleurs à continuer d’ajouter et d’activer la valeur AlwaysUnloadDLL pour une plus grande stabilité de vos systèmes Windows, notamment sur les serveurs de type Bureau à distance, s’appuyant sur le protocole RDP.
Afin de connaître les DLL utilisées par un exécutable, vous disposez d’un extraordinaire utilitaire au nom de Dependency Walker. Il vous offre la possibilité de disposer de la liste complète des DDL associées à l’exécutable au format CSV, en faisant File -> Save As.