IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

dll, conditions pour un programme modulaire


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 42
    Points
    42
    Par défaut dll, conditions pour un programme modulaire
    Bonjour,

    Je cherche à connaitre quelles sont les conditions a respecter sur une dll pour que le programme qui l'utilise soit facilement mis a jour : simplement en changeant la dll, sans avoir a recompiler l'executable.
    - Faut t'il que dans la nouvelle version de la dll, les membres des classes soient dans le meme ordre que dans l'ancienne dll ?
    - Peut on ajouter des membres et fonctions aux classes ?
    - peut on ajouter de nouvelles classes ?

    En d'autres termes, dans quelle mesure peut on modifier les ".h" de la dll ?

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En d'autres termes, dans quelle mesure peut on modifier les ".h" de la dll ?
    A partir du moment où ces .h sont partagés (utilisés) par l'exécutable, toute modification entraîne une recompilation de celui-ci.
    Seule une modification qui ne toucherait pas à l'interface publique ne nécessiterait pas de recompilation.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 42
    Points
    42
    Par défaut
    Merci,

    L'interface publique, c'est a dire les classes precedees de __declspec (dllexport) ?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par Zbouirf
    L'interface publique, c'est a dire les classes precedees de __declspec (dllexport) ?
    Non, c'est tout ce qui est susceptible d'être utilisé par le client de la DLL. Donc les fonctions / classes / variables exportées, mais aussi les définitions de constantes, les templates, ... En gros si tu touches à un en-tête que le client est susceptible d'inclure, recompile.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 42
    Points
    42
    Par défaut
    Ok, merci c'est cool.

  6. #6
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    a noter que si tu as une DLL a chargement dynamique, tu peux inclure un system de control de version pour interompre le chargement si l'interface que le client inclue est differente de celle compilée.

    Ca parait un peu inutile en stand alone, mais dès le moment ou ton code tourne a plusieurs endroit ca va te sauver la vie...
    Pour les details, cherche tout seul !

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    [QUOTE=Zbouirf]Bonjour,

    Je cherche à connaitre quelles sont les conditions a respecter sur une dll pour que le programme qui l'utilise soit facilement mis a jour : simplement en changeant la dll, sans avoir a recompiler l'executable.
    Citation Envoyé par Zbouirf
    - Faut t'il que dans la nouvelle version de la dll, les membres des classes soient dans le meme ordre que dans l'ancienne dll ?
    Ca dépend. Si les fonctions membres sont virtuelles, leur ordre de déclaration ne doit pas changer.
    Si les fonctions membres ne sont pas virtuelles, l'ordre n'importe absoluement pas, le link se fera au moment du chargement de la DLL.
    Quant aux membres de la classe c'est extrêmement dangereux, SAUF si TOUS les membres sont privés (et donc non accessible sans passer par une fonction).
    Citation Envoyé par Zbouirf
    - Peut on ajouter des membres et fonctions aux classes ?
    Si la classe elle même est exportée, non, sinon, oui forcément

    Citation Envoyé par Zbouirf
    - peut on ajouter de nouvelles classes ?
    Sans aucun probleme....

    Franchement, la meilleur solution aux DLLs a été apportée par microsoft par 'COM'. C'est lourd, c'est gavant, mais au moins c'est propre, et c'est du vrai orienté objet.
    Une fois qu'une interface a été exportée, on a plus le droit de la toucher... Seule option, créer une nouvelle interface, nouveau GUID, etc.. Et faire en sorte que les objets supportent les deux interfaces.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DLL Multi-Thread pour un programme en C
    Par TANITE dans le forum C#
    Réponses: 5
    Dernier message: 02/09/2013, 10h36
  2. Une DLL pour plusieurs programmes
    Par lea436 dans le forum C#
    Réponses: 4
    Dernier message: 28/11/2011, 19h38
  3. Programmation modulaire pour serveur
    Par skeud dans le forum Langage
    Réponses: 3
    Dernier message: 09/06/2011, 13h06
  4. Réponses: 6
    Dernier message: 28/06/2008, 15h40
  5. [LG]Divers problémes pour un programme.
    Par Horus TCT dans le forum Langage
    Réponses: 14
    Dernier message: 24/05/2003, 23h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo