2010-10-05 4 views
1

C'est probablement une question très stupide. Mais supposons que j'ai une DLL (test.dll), avec quelques exports, qui génère une librairie d'import (test.lib). J'ai une application TestApp qui utilise cette DLL.Ai-je besoin de reconstruire contre un DLL, si ses exportations n'ont pas changé?

Maintenant, si je veux changer l'implémentation de certaines fonctions dans la DLL, et que je garde les exportations non-libérées, ai-je besoin de reconstruire mon application qui utilise cette bibliothèque DLL/import?

Merci.

Répondre

3

Non. Vous n'avez PAS besoin de reconstruire par rapport à la DLL. Considérez que votre application fonctionne sous Windows XP et qu'un jour Windows 7 est disponible. La même application continue de fonctionner sans reconstruction même si les DLL système comme user32.dll, kernel32.dll sont mises à jour!

1

no. L'un des buts de la bibliothèque partagée (vs bibliothèque statique) est exactement ceci: tant que ce que l'extérieur voit ne change pas (les définitions/fonctions exportées), les applications qui l'utilisent n'ont pas besoin d'être recompilées.

1

Si les fonctions sont des fonctions C et que vous ne modifiez pas la définition des structures en cours de traitement, il n'est pas nécessaire de reconstruire l'application. Si la DLL exporte des classes C++, le module d'importation doit être reconstruit. Même si les signatures de méthode ne changent pas, l'exportation de classe C++ est fuyante: lors de l'allocation d'espace pour la classe, aucune fonction d'allocation définie est exporté (par défaut) en tant que tel le module d'importation doit deviner combien d'espace allouer, avant d'appeler le constructeur (exporté). Il construit cette supposition en analysant la définition des classes. La conséquence malheureuse de ceci est, même si vous faites attention à ne modifier que les détails d'implémentation des classes - même si les signatures de méthode restent les mêmes et que la DLL se chargera correctement, l'application allouera le nombre incorrect d'octets créer une nouvelle instance sur le tas ou la pile.

Questions connexes