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 :

Héritage depuis une DLL en C++ ?


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Héritage depuis une DLL en C++ ?
    Bonjour à tous,

    Ma question va peut-être vous paraître ridicule mais voilà, je suis débutant avec les DLLs en C++ (avec Visual C++)...

    Je travaille sur un projet existant, je n'ai donc pas le choix des méthodes utilisées. Le programme est organisé en DLLs. Ce sont les classes entières qui sont exportées, avec une variable de type SOUSPROJET_API dans la déclaration de celles-ci.

    Je développe actuellement une nouvelle DLL, dans laquelle je définis une
    classe "Rectangle", qui dérive de la classe "Forme". J'ai donc une définition comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # include "OUTILS_def.h" //définit OUTILS_API
    class OUTILS_API Rectangle : public Forme
     {
    (mon code source)
    };
    Mais quand je compile, j'ai une erreur qui me dit "undefined base class Forme"... Cette classe se trouve pourtant dans une DLL appelée PMATHS2.dll, elle est exportée avec MATHS2_API, bref je ne comprends pas pourquoi il ne la trouve pas.... j'ai pourtant linké mon projet avec la lib concernée...

    Quelqu'un a une idée ?

    Merci beaucoup d'avoir pris le temps de lire mon message et merci d'avance pour l'aide précieuse que vous m'apporterez !

    Greg

  2. #2
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour!

    Simple vérification : tu es allé voir dans le header que tu inclus si il y a bien effectivement la définition de la classe? Et pas seulement sa déclaration?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour Klaim,

    Merci pour ta réponse.

    Le header "OUTILS_Defs.h" contient uniquement la déclaration de ma variable OUTILS_API, utilisée pour l'export. Mais la classe Forme est déclarée dans un .h qui est inclus, et définie dans un .cpp compilé dans la fameuse DLL...

    On peut hériter d'une classe qui se trouve dans une DLL (donc compilée) ou il faut recopier son code source ?

    Merci !!

    Greg77

  4. #4
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Normalement la définition suffit. Par contre ton compilateur ne semble pas la trouver... A part un problème d'include je ne vois pas d'où peu venir le problème. Véirife qu'une macro ne rends pas la définition non-incluse.

    Sinon vérifie les lignes juste avant l'erreur voir si il n'y a pas un autre problème qui rends l'expression caduque?

  5. #5
    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
    Salut,
    Il y a peut être un problème si OUTILS_API est utilisée aussi bien pour les classes exportées de ta nouvelle DLL que pour les classes importées d'autres DLLs. Celles que tu importes devraient avoir un BIDULE_OUTILS_API qui correspond à _declspec (dllimport). Celle que tu exportes devraient avoir un TRUCMUCHE_OUTILS_API correspondant à _declspec (dllexport).

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour Klaim et 3DArchi.

    Vous aviez raison, je m'étais un peu mélangé les pinceaux dans mes variables d'export (les XXX_API).
    J'ai repris ça au propre en suivant vos conseils et je n'ai plus le problème !!
    Merci beaucoup à vous deux !

    Greg

Discussions similaires

  1. Appeler une unité depuis une DLL
    Par xavier ringoise dans le forum Langage
    Réponses: 2
    Dernier message: 03/02/2006, 21h31
  2. [MFC]agir sur un control depuis une dll
    Par giova_fr dans le forum MFC
    Réponses: 3
    Dernier message: 01/02/2006, 23h23
  3. [DLL] Appel d'une frame depuis une DLL
    Par Rayek dans le forum Langage
    Réponses: 6
    Dernier message: 16/12/2005, 16h32
  4. Réponses: 5
    Dernier message: 08/09/2005, 20h33
  5. Comment charger un TFrame depuis une dll ?
    Par Millenod dans le forum Langage
    Réponses: 29
    Dernier message: 22/12/2004, 14h48

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