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 :

Exporter une classe dans une DLL


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 85
    Points : 113
    Points
    113
    Par défaut Exporter une classe dans une DLL
    Bonjour,

    Je voudrais créer une DLL avec des classes utilitaires perso que je pourrais utiliser dans d'autres projets.

    Je ne voudrais pas passer par les "__declspec(dllexport)" (pas de chargement dynamique) mais par un fichier DEF dans le but de créer un fichier LIB associé à ma DLL.

    Si on veut exporter des fonctions C "Ouvrir" et "Fermer" par exemple, il suffit de créer le fichier DEF :
    EXPORTS
    Ouvrir @1
    Fermer @2
    Maintenant si je veux exporter la classe (et ses fonctions) suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Fichier
    {
    	public:
    		void Ouvrir(void);
    		void Fermer(void);
    };
    Qu'est-ce que je dois mettre dans le fichier DEF?

    J'ai trouvé des exemples assez bizarres. Ce qui devrait donner pour mon exemple un truc dans le genre :
    EXPORTS
    ??0Fichier@@QAE@XZ @1
    ?Ouvrir@Fichier@QAEXXZ @2
    ?Fermer@Fichier@QAEXXZ @3
    J'ai du mal à trouver une logique . Est-ce que quelqu'un pourrait éclairer ma lanterne?

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 85
    Points : 113
    Points
    113
    Par défaut
    Aide-toi et le ciel t'aidera!
    Il suffisait de trouver le nom, ça s'appelle le "mangling" : http://en.wikipedia.org/wiki/Microso..._Name_Mangling

    Par contre bonjour la compréhension...

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 85
    Points : 113
    Points
    113
    Par défaut
    Sinon pour ceux qui comprennent rien à l'article... comme moi, il suffit d'aller lire directement les décorations des fonctions à la fin des fichiers OBJ générés par le compilateur de VC++.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Exporter directement des classes et des fonctions membres sans passer par __declspec, pour moi c'est se tirer une balle dans le pied.

    Il est mieux de passer par une "interface" (classe abstraite pure) et exporter une fonction libre et déclarée extern "C" qui retourne un pointeur vers un nouvel objet...

    Par contre, avec ça tu es restreint à la création de l'objet par allocation dynamique. Mais franchement, pour tes classes utilitaires, ne t'embête pas et utilise directement __declspec...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. [C#]Accéder à une methode dans une classe d'une DLL externe
    Par Greg34000 dans le forum Services Web
    Réponses: 3
    Dernier message: 28/03/2013, 15h54
  2. 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
  3. [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
  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