Windows peut-il distinguer les DLL 32 bits et 64 bits?

Les applications Windows devraient-elles généralement être capables de distinguer deux DLL portant le même nom, l’une étant de 32 bits et l’autre de 64 bits, si elles se trouvent dans deux chemins distincts dans la variable PATH du système?

Plus précisément, j’ai maintenant des DLL 32 bits et 64 bits pour FreeImage, et ils se trouvent dans deux dossiers distincts, free_image_path\dist32 et free_image_path\dist64 , tous deux ajoutés au système PATH. Cependant, les applications créées pour les utiliser ne peuvent pas non plus trouver et je me demande si cela est dû au fait qu’il existe deux DLL portant le même nom et qu’elles ne peuvent pas les distinguer.

J’ai également essayé de mettre les DLL 32 bits et 64 bits dans les dossiers windows \ system et windows \ SySWoW64 respectivement, et cela a fonctionné pour l’application 32 bits, mais pas pour le 64 bits.

Merci.

Windows peut dire si une DLL donnée est compilée pour des plates-formes 32 bits ou 64 bits, mais cela ne vous aidera pas dans la situation que vous décrivez. Le chargeur de DLL pour votre processus d’application cessera de chercher dès qu’il trouvera une DLL dans le chemin d’access du système qui correspond aux exigences de nom de fichier pour l’importation de DLL. Il n’y a pas d’autres qualifications pour faire correspondre les DLL de code . (Comme indiqué dans les commentaires, les DLL de ressources non-code sont une autre histoire. Je suppose que les DLL de ressources ne sont pas chargées par le chargeur de programmes mais par un gestionnaire de ressources avec des règles et des objectives différents.)

Si la première DLL du chemin est 32 bits et que votre application est 32 bits, le chargement de la DLL fonctionnera. Si l’application est 64 bits, le chargement de la DLL échouera et le processus sera interrompu.

Si vous souhaitez que deux DLL coexistent sur le chemin du système, vous devez leur donner des noms de fichiers uniques.

Au lieu de mettre le dll 64 bits dans \windows\system32 et celui de 32 bits dans \windows\syswow64 , j’ai trouvé que cela fonctionne aussi si vous placez le 32 bits dans un sous-répertoire de \Program Files (x86) et celui de 64 bits dans le sous-répertoire correspondant de \Program Files , avec les deux sous-répertoires inclus dans PATH.