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 :

Comment savoir s'il faut exporter une classe dans une dll ?


Sujet :

C++

  1. #1
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut Comment savoir s'il faut exporter une classe dans une dll ?
    Bonjour à tous

    Présentation du contexte : disons que j'aimerai créer une application, par exemple un moteur de rendu de terrain en 3D (avec Visual C++ et uniquement sous Windows) qui serait représenté par une dll. Comment je peux savoir si je dois ou pas exporter une classe dans cette dll ? Quel(s) critère(s) dois-je prendre en compte ? Y'a-t-il des règles ?

    Merci d'avance
    Kromagg
    C'est dans ses rêves que l'homme trouve la liberté cela fut, est et restera la vérité! (John Keating - Le cercle des poètes disparus)

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Le critère le plus important sera déjà le contenu de la classe en question...

    Si elle n'utilise que des type POD (c'est à dire des types primitifs ou des structures composées de types primitif, sans fonction membre), tu peux l'exporter sans trop de problèmes (mais j'hésite quand même à rajouter comme condition que la structure soit elle même de type POD )

    Dans tous les autres cas, si tu prend la décision d'exporter une de tes classes dans une dll, il faudra que l'application qui utilise cette classe soit compilée avec la même version de compilateur et les même options de compilation que la dll, ce qui restreint singulièrement l'utilisation qui pourrait être faite de ta dll.

    Maintenant, si la dll en question fait partie intégrante du projet de l'application (qu'il ne s'agit que d'un "plugin" de l'application), que le tout ne sera jamais livré que de concert et que l'application et la dll sont destinées à être systématiquement compilées ensemble (ou peut s'en faut), tu ne souffrira pas de cette limite

    Si tu n'est pas dans le cadre d'une structure de type POD, il s'agira donc d'évaluer s'il est opportun ou non de placer cette limite quant à l'utilisation de la dll.

    Et, bien sur, tu dois veiller à ce que la dll n'exporte en tout état de cause que ce qui est nécessaire à son travail de manière générale:

    S'il y a une classe qui ne sert qu'à "usage interne" (comprend: que l'utilisateur de la dll peut même ignorer que la classe existe, parce que sa gestion est intégralement prise en charge de manière transparente par d'autres), il n'y a aucune raison de l'exporter

    Il y a peut être d'autres facéties à prendre en compte, mais ce sont celles qui me viennent de prime abord à l'esprit
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    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
    Une méthode comme une autre si tu n'as pas envie de t'aventurer dans l'architecture complete, c'est de ne rien exporter... et voir au fur et à mesure ce qu'il manque (le compilo va te le dire si un truc doit être exporté) !
    En général un plug-in n'exporte jamais rien, sauf un point d'entrée et/ou une variable statique...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Je rajouterais qu'in fine les classes que tu exportes devraient n'exposer que des services attendus par ta bibliothèques et surtout pas des détails d'implémentation. Ca peut vouloir dire faire des choses comme des classes d'interfaces, l'utilisation du pimpl idiom, etc.
    L'idée de nicoman est assez intéressante si tu ne vois pas trop où est la frontière entre ce que tu dois exporter ou non : tu fais ton moteur et ensuite tu créés une première application. Au fur et à mesure que tu fais ton application, tu regardes ce qu'il te manque. Il faut penser à ce qu'il te manque en terme de fonctionnalités et non par rapport à ce que tu as impémentés. Ca peut coïncider ou pas : au quel cas il faut penser à l'interface qui encapsule le service attendus et fait le pont avec ton implémentation.

  5. #5
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut
    Merci pour vos conseils
    Je vais y aller à taton comme suggéré en important seulement au fur et à mesure.
    En fait je pensais découper le moteur en deux parties distinctes :
    - la partie générale qui concerne le moteur en lui même, les classes de bases, les outils et le rendu.
    - la partie plugins ou je vais développer chaque technique de rendu de terrain dans une dll différente.

    Merci encore
    Kromagg
    C'est dans ses rêves que l'homme trouve la liberté cela fut, est et restera la vérité! (John Keating - Le cercle des poètes disparus)

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

Discussions similaires

  1. Eval d'une propriété d'une classe dans une classe
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/10/2008, 09h43
  2. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  3. [POO] Une Classe dans une Classe. C'est possible?
    Par FrankOVD dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2006, 22h02
  4. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 14h34
  5. Une classe dans une classe...
    Par Baquardie dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/09/2005, 19h36

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