2010-04-16 8 views

Répondre

4

[Je pense que j'ai eu ma réponse maintenant]

Si vous utilisez MFC DLL comme liaison dynamique, votre code nécessitera les DLL Microsoft Foundation Library (en particulier la version requise par votre code) installée avec votre application ou DLL dans la fin de l'utilisateur. Donc, cela signifie que votre package d'installation contiendrait

  • Votre application/fichiers DLL et support
  • Tous les MFC Dlls

Cela rend la taille du package d'installation va plus et faire également prendre du temps pour l'utilisateur à télécharger votre installation.

Si vous liez au MFC en tant que bibliothèque statique, le code fonctionnera même sans les DLL MFC présentes à la fin de l'utilisateur. La raison étant assez simple que toutes les bibliothèques MFC que vous avez référencé dans votre code, seront liées à votre application ou DLL. Cela signifie que les bibliothèques MFC utilisées dans votre app/dll deviennent la partie de votre binaire; Cependant, votre application/dll sera un peu plus grande.

+1

Bien que la réponse d'Andy soit correcte pour différencier la bibliothèque statique et partagée, puisque cette question concerne la demande de différence entre "Utiliser MFC comme bibliothèque statique ou partagée", cette réponse est choisie pour être correcte. – AKN

11

Une bibliothèque statique signifie que le code que vous utilisez dans la bibliothèque est inclus dans votre exécutable. Pour cette raison, vous n'avez pas besoin d'expédier la bibliothèque ou d'exiger que l'utilisateur final l'ait sur sa machine. Cependant, cela gonfle la taille de votre exécutable et vous lie à cette version de la bibliothèque, donc si vous avez besoin de mettre à jour uniquement la bibliothèque, vous devez envoyer un nouvel exécutable. Une bibliothèque partagée appelle la bibliothèque au moment où elle en a besoin (runtime) pour exécuter le code, mais elle nécessite que l'utilisateur l'installe (généralement une version spécifique ou minimale) sur sa machine. Vous pouvez également distribuer la version requise de la bibliothèque avec votre application si nécessaire.

En ce qui concerne ce qui est mieux, je ne sais pas. Je ne suis pas un programmeur Windows C++ ou MFC donc je ne pourrais pas le dire. Sur mes serveurs Linux, les applications que j'écris sont généralement côté serveur et utilisent donc des bibliothèques partagées.

Cela dépend de la façon dont votre application doit être utilisé, distribué, mis à jour, la fréquence des changements de la bibliothèque MFC, si elle est généralement disponible sur les PC de l'utilisateur, etc.

2

Une autre considération est l'entretien de votre application. Si vous expédiez le redis MSFT, lier dynamiquement à ses bibliothèques, puis MSFT "corrige" une faille vitale dans une DLL, ils corrigent la DLL sur les machines de vos clients via la mise à jour de Windows. Si vous établissez un lien statique, vous devrez mettre à jour tous vos clients directement. Bien sûr, si vous craignez qu'une DLL corrigée puisse casser votre application (parce que vous comptez sur un comportement non spécifié), vous voudrez peut-être gérer le service (et les tests) directement avec votre client.