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 :

Problème : créer une classe dans une dll et l'exporter dans une application.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15
    Par défaut Problème : créer une classe dans une dll et l'exporter dans une application.
    Bonjour,

    Je voudrais mettre une classe dans une dll puis utiliser cette classe dans une application qui utiliserait la dll .

    Seulement je n'arrive pas à instancier ma calss qui estdans la dll une fois la dll chargée.

    j'ai repirs le code de la présentation suivante :

    http://lfe.developpez.com/DLL/#L6

    donc la class foo est exactement comme dans lexemple dans un fichier foo.cpp et foo .h
    mais ca cloche quelque part.

    voici le code de ma dll :

    #include "foo.h"

    IMPEXP foo ;

    #pragma argsused
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
    return 1;
    }
    Voila si quelqu'un a la réponse merci.

    Sinonle source de l'exemple aurait été bien utile.

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    elle est ou ta classe ?

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Par défaut
    tou dépend si ta DLL est chargé implicitement ou explicitement !
    en bref si tu a utilisé un dllexport dll import (implicite) ou un loadlibrary()(explicite)

    selon les deux cas ce nest pas le meme probleme !

    en implicite tu pourra utiliser la classe de ta dll comme si elle etait dans ton programme tandi qu'en explicite c plus compliqué !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15
    Par défaut désolé c'est parcequ'elle étaitdans l'exemple cité, voilà la classe
    Voila le code de la classe :

    .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
     
    #ifdef __DLL__
    #define IMPEXP __declspec(dllexport)
    #else
    #define IMPEXP __declspec(dllimport)
    #endif
     
    //---------------------------------------------------------------------------
    IMPEXP class foo {
        public:
            int N1, N2, Result;
            void __stdcall AddN();
            int __stdcall GetResult();
            foo();
    };
    .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
     
    #include "foo.h"
     
    foo::foo()
    {
        N1 =0;
        N2 =0;
        Result=0;
    }
     
    void __stdcall foo::AddN()
    {
        Result = N1 + N2;
    }
     
    int __stdcall foo::GetResult()
    {
        return Result;
    }

    et le code d'importation :

    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
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit2.h"
     
    extern "C" __declspec(dllimport) foo ;
     
     
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TFormT *FormT;
    //---------------------------------------------------------------------------
    __fastcall TFormT::TFormT(TComponent* Owner)
            : TForm(Owner)
    {
      foo * test ;
    }

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef __DLL__
    #define IMPEXP __declspec(dllexport)
    #else
    #define IMPEXP __declspec(dllimport)
    #endif

    dans le .h de ta DLL il faut que tu fasse un #define __DLL__ pour activer le mode export

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15
    Par défaut Ya pas de .h dans la dll
    j'ai pas de .h pour la dll ya juste un .cpp

    ca serait pas plutotdans le .h de la classe ?

    et pour l'importation dans l'appli c'est bon ou il faut faire autre chose ?

    merci.

  7. #7
    Membre averti
    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
    Par défaut
    Bonjour,

    Mon probleme quoique different a sa place dans cette discussion, c'est pourquoi je la relance.

    Ma dll est en fait un plugin, ce plugin doit comporter une classe qui hérite d'une autre dont toutes les méthodes sont virtuelles. La dll est chargée à l'aide de "LoadLibrary". Dès lors, comment faire pour instancier la classe de la dll ? Suis je obligée d'imposer aux createurs de plugins de fournir dans leur dll une fonction qui instancie leur classe et renvoie un pointeur dessus ou puis je l'instancier moi meme ?

    Merci

  8. #8
    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
    Tu es obligé de spécifier dans l'interface de la DLL une fonction de création. Cette fonction doit être déclarée extern "C" et toujours être exportée sous le même nom, et c'est ce nom que cherchera ton programme.

    Ou bien, tu peux exiger qu'un fichier de config soit fourni avec le plugin, pour indiquer le nom de la fonction à appeler. Mais dans tous les cas, son prototype doit être fixe, et c'est à toi de l'imposer.
    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.

  9. #9
    Membre averti
    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
    Par défaut
    Merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/05/2013, 02h22
  2. Export d'une classe MFC d'un programme vers DLL
    Par yann458 dans le forum MFC
    Réponses: 1
    Dernier message: 16/05/2013, 10h00
  3. Réponses: 3
    Dernier message: 29/06/2012, 01h09
  4. Dans quel script est la definition d'une classe, d'une fonction,
    Par debutant100 dans le forum Général Python
    Réponses: 6
    Dernier message: 05/04/2011, 19h19
  5. Réponses: 5
    Dernier message: 27/11/2009, 09h21

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