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 :

création de dll objet


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Par défaut création de dll objet
    Bonjour, j'aimerais savoir comment faire pour créer des dll qui contiennent des objets ?


    merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Qui contiennent juste des objets ou qui exposent carrément des classes ?
    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.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Par défaut
    Je voudrais une dll qui contient des classes.

    le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    class Personne
    {
    class Personne
    {
    public :
        Personne(char* nom,char* prenom);
        char* getNom();
        char* getPrenom();
        void setPrenom(char* prenom);
        void setNom(char* nom);
     
    private :
        char* nom ;
        char* prenom ;
    };
    le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Personne::Personne(char *nom,char *prenom)
        :prenom(prenom),nom(nom)
    {
    }
     
    char* Personne::getNom()
    {
        return nom;
    }
     
    char* Personne::getPrenom()
    {
        return nom;
    }
     
    void Personne::setNom(char* nomX)
    {
        nom = nomX ;
    }
     
    void Personne::setPrenom(char* prenomX)
    {
        prenom = prenomX ;
    }
    Pour le moment j'ai ca, et j'aimerais le transformer en dll afin de pouvoir l'utiliser par la suite.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Il faut faire un projet DLL et déclarer tes classes avec l'attribut signifiant "je suis exportée par cette DLL".
    Voir ici pour un exemple de fichier d'en-tête tel qu'un compilo peut le générer, et la manière de l'utiliser:
    http://www.developpez.net/forums/sho...42&postcount=6

    Ensuite, quelques notes sur les DLLs C++ :
    • Les classes C++ ne sont utilisables qu'avec le même compilateur que celui qui a généré la DLL.
    • De plus, elles ne sont utilisables qu'en liant implicitement avec la DLL (en ajoutant aux options du linker le .lib (ou le .a) généré avec la DLL).
      • Pour contourner ces limitations, il faut faire un truc plus compliqué: Une DLL avec des classes dont toutes les fonctions sont virtuelles, et une fonction extern "C" pour créer un objet de cette classe.
    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.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Par défaut
    Voilà je viens de faire le test suivant :

    test.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #ifndef H_TEST
        #define H_TEST
     
        #ifndef EXTERN_C
            #ifdef __cplusplus
                #define EXTERN_C extern "C"
            #else
                #define EXTERN_C extern
            #endif
        #endif
     
        #ifdef BUILDING_TEST
            #define TEST_API __declspec(dllexport)
        #else
            #define TEST_API __declspec(dllimport)
        #endif
     
        class TEST_API Test
        {
        public:
            char* addPoint();
        };
     
    #endif
    test.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "test.h"
     
    char* Test::addPoint()
    {
        return "Bonjour" ;
    }
    Avant de compile je définie BUILDING_TEST et je compile. Il n"y a aucune erreur et j'obtient bien mon fichier .lib , .dll , .exp , .ilk et .pbd

    Ensuite je cré mon programme console :
    j'inclue mon fichier .h et je le main.cpp suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "stdafx.h"
    #include "test.h"
     
    int _tmain(int argc, _TCHAR* argv[])
    {
        Test *text = new Test();
        char chaine[] = text->chaine();
        printf("%s", chaine);
    return 0;
    }
    Avant de compilé, je veux importer le .lib donc je vais dans Projet->Proprièté->Editeur de liens->Avancé->Bibliothèque d'importation et la j'ajoute le chemin de mon fichier .lib

    Ensuite je lance la compilation malheuresement j'ai un message d'erreur

    [EDIT]

    Je suis sous Visual Studio 2005
    Voilà le message
    Erreur 1 error LNK2001: symbole externe non résolu "__declspec(dllimport) public: char * __thiscall Test::chaine(void)" (__imp_?chaine@Test@@QAEPADXZ) test.obj

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pas facile de voir ce qui ne va pas quand on a écrit soi-même le code, hein ?
    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.

Discussions similaires

  1. création dynamique d'objet, projet win32
    Par noinneh dans le forum MFC
    Réponses: 5
    Dernier message: 03/02/2005, 16h07
  2. [Reflexivite]création dynamique d'objet et Héritage
    Par norkius dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 26/10/2004, 11h37
  3. Création de DLL
    Par J. dans le forum Windows
    Réponses: 2
    Dernier message: 24/08/2004, 11h59
  4. Création d'un objet d'un form a l'autre
    Par Argonz dans le forum C++Builder
    Réponses: 12
    Dernier message: 03/03/2004, 10h23
  5. Problème création de DLL
    Par monsieur.voie.lactee dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/08/2003, 16h56

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