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 :

Dll en mode debug et release


Sujet :

C++

Vue hybride

babar63 Dll en mode debug et release 30/01/2008, 16h12
koala01 Salut, J'aurais presque... 30/01/2008, 16h37
Jean-Marc.Bourguet Je ne connais pas Windows et... 30/01/2008, 17h00
Médinoc Note: au passage sur la façon... 30/01/2008, 17h16
babar63 Merci pour vos reponse, si je... 30/01/2008, 17h21
Médinoc Je dirais que ça doit surtout... 30/01/2008, 17h23
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut Dll en mode debug et release
    Bonjour a tous,
    Je suis actuellement en train de develloper une dll pour la premiere fois. Enfin fini et apres avoir corriger quelques erreurs j'obtiens bien ma dll et ma librairie statique. Le probleme c'est qu'en la testant, la dll fonctionne seulement lorsque je suis en mode release (pour la dll crée en release) et en mode debug (pour la dll crée en mode debug). Il semblerait que dans les deux cas le probleme viennent de la perte de l'adresse des paramètres envoyés dans une fonction membre . La dll a été créée a l'aide de Visual 2005 (projet Win32 dll). J'ai cherché dans la faq ainsi que deux autres articles appartenant a developpez mais je ne crois pas avoir trouvé de reponse!
    Si cela peut vous aider voila comment j'ai defini ma configuration dans le projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //config.h
    ...
    #ifdef _WINDLL
    #define IMPORT_EXPORT __declspec(dllexport)
    #else
    #define IMPORT_EXPORT __declspec(dllimport)
    #endif
    Et dans la declaration de mes classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //class.h
    #include <config.h>
    ...
    class IMPORT_EXPORT MaClass{
    ...
    };
    J'avoue que j'ai un peu survolé l'étape de l'apprentissage pour créer une dll pour mieux me concentré sur le code ! Auriez-vous une idée d'ou se situe le probleme?
    Merci d'avance, bonne journée

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 641
    Par défaut
    Salut,

    J'aurais presque envie de dire que c'est normal.

    En effet, il y a souvent une option de compilation (-DDEBUG, par exemple) rajoutee pour indiquer que la dll est compilee en mode debug, ce qui a pour effet d'y inclure une serie de choses, allant des assertions jusqu'a certains symboles, necessaires... au debuggage.

    Tu devrais donc pouvoir utiliser la dll "debug" pour une application en mode release, mais, par contre, il est peu vraissemblable que l'utilisation de la dll release fonctionne avec une application en mode debug.

    L'idéal est donc, sans doute, de fournir un nom legerement different pour la dll en mode debug, de manière à pouvoir faire le distingo, et permettre à l'utilisateur de choisir celle qu'il veut utiliser

    Une convention que l'on rencontre souvent est, tout simplement, de rajouter la lettre d en fin de nom (madll.dll d'un cote, madlld.dll de l'autre),
    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 confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Je ne connais pas Windows et ne peux donc pas commenter sur la nature et les causes du probleme. J'ai par contre beaucoup de mal a considerer comme normal de ne pas pouvoir utiliser une bibliotheque "release", qu'elle soit dynamique ou non, dans un build debug. (L'inverse, ne pas pouvoir utiliser la bibliotheque debug dans le build release, me semble plus comprehensible mais neanmoins pas particulierement acceptable et encore moins desirable).

  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
    Note: au passage sur la façon dont est faite ta DLL: À moins que ta DLL s'appelle "IMPORT.DLL", je te déconseille d'appeler ton define "IMPORT_EXPORT". Tu devrais lui donner un nom unique, typiquement NOMDELADLL_API.
    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 confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Merci pour vos reponse, si je n'ai pas le choix alors je vais faire comme ca, c'est en effet la méthode que j'employait pour créer des librairies statiques. Mais quelques choses me chagrine quand meme. Pourquoi certaines dll (et meme lib) fonctionnent très bien dans les deux cas de figures, il doit bien exister une solution non? par exemple la librairie glut32.dll ou SDL.dll peuvent etre utilisées en mode debug et release...

  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
    Je dirais que ça doit surtout dépendre de la façon dont la DLL en question utilise la C Run-Time Library (CRT). Car si tu mélanges Debug et Release, tu auras deux versions de la CRT chargées dans le même processus...
    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.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 641
    Par défaut
    C'est vrai que le terme "normal" est particulièrement inadapté...

    j'aurais du utiliser le terme "compréhensible" (et encore )

    Toujours est-il que cela peut, entre autre, venir de la manière dont ta bibliothèque est liée avec celle dont elle dépend en mode release et en mode debug...

    S'il se fait, d'une manière ou d'une autre, qu'une distinction est effectuée dans le choix des bibliothèques dépendantes selon le mode de compilation choisi, tu te trouvera vraisemblablement confronté à cette nécessité de devoir créer une dll "release" et une "debug" (l'inverse étant tout aussi envisageable, bien sur )
    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

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

Discussions similaires

  1. difference entre mode debug et release
    Par haykelFST dans le forum C++
    Réponses: 5
    Dernier message: 23/06/2011, 09h10
  2. Réponses: 7
    Dernier message: 07/03/2009, 11h09
  3. DLL mode debug ou release
    Par squale69 dans le forum Visual C++
    Réponses: 4
    Dernier message: 09/05/2008, 00h10
  4. Savoir le mode : debug ou release
    Par BruceBoc dans le forum C++
    Réponses: 8
    Dernier message: 24/04/2007, 00h09
  5. Difference Mode debug et release
    Par balabi dans le forum MFC
    Réponses: 3
    Dernier message: 16/06/2005, 11h30

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