2017-10-12 9 views
2

QuestionComment Windows gère le chargement de deux versions différentes d'une DLL?

Je vous écris un logiciel qui utilise une version de DLL spécifique. J'ai localisé la DLL spécifique dans le répertoire d'exécution, de sorte que le programme utilise celui-ci. Mais maintenant je ne sais pas ce qui se passe si la DLL spécifique est chargée et qu'un autre programme est démarré qui a besoin d'une version plus récente. Est-ce que quelqu'un sait ce qui va se passer? Est-ce que l'autre programme tombe en panne ou est-ce que l'accident se produit?

Autres

Cette question est pour le système d'exploitation: Windows 10 et Windows 7. Le poste de travail est en cours d'exécution est mises à jour Windows de sorte que la DLL sera à jour. Ecriture de code en C++.

+1

Pourquoi l'un ou l'autre programme plante-t-il? Votre programme chargera votre DLL; l'autre programme, à moins que quelque chose ne soit très faux, chargera sa DLL. Mais qu'est-ce que Windows Update a à voir avec quoi que ce soit? –

+0

Windows Update pourrait mettre à jour la dll –

+0

mais les fenêtres peuvent charger 2 de la même DLL? seulement des versions différentes? ou Windows utilise-t-il la dernière version chargée lorsque les deux programmes s'exécutent en même temps? –

Répondre

0

Différentes DLL peuvent être chargées dans différents processus.

Les espaces d'adressage des différents processus sont indépendants et n'interfèrent pas entre eux.

Si la DLL utilise une chose nommée globale (par exemple, fichier sur disque, mutex, mémoire partagée), alors l'interopérabilité de la DLL spécifique pourrait interférer les uns avec les autres.

Si elles avaient un seul chemin d'accès à la base de données, qui était à la version 12, si l'ancienne DLL ne comprenait pas la version 12, il peut se bloquer.

Deux versions différentes de la même DLL peuvent être chargées en utilisant LoadLibrary dans le même processus. Cela nécessitera une DLL appelée via GetProcAddress ou une autre méthode secondaire, mais les deux DLL peuvent exister et fonctionner dans le même processus. Deux DLL dans le même processus peuvent également interférer lors de l'accès aux objets nommés.