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

Visual C++ Discussion :

DLL mode debug ou release


Sujet :

Visual C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Points : 41
    Points
    41
    Par défaut DLL mode debug ou release
    Bonjour,

    Sous Visual C++ 2008, j'ai fait une DLL (juste pour info 1 classe et 1 procédure). Elle est en mode non managée, W32 basique.
    Si je compile cette DLL en mode debug et que je l'utilise dans mon projet global (/clr par contre), lui aussi en mode debug, aucun problème tout fonctionne.
    Si je compile la DLL en mode release, et que je l'utilise dans le projet qui reste en mode debug une partie du code seulement fonctionne (par exemple le constructeur de ma class, mais pas ma procédure). Pas de debug possible dans ce mode bien sûr.
    Quand je dis "je l'utilise", c'est en mettant *.lib, *.dll, *.h dans le même répertoire que le projet global pour être certain du résultat.

    Pas le droit de faire ça ? Je passe à côté de quelque chose ?
    Merci.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    ben non , le problème vient de bibliothèque de runtime (CRT) .
    si tu es en mode dll partagée ça ne peut fonctionner puisque tu auras une partie en debug et une autre en release.
    en statique (/MT) ça devrait etre mieux, mais bon il est préférable d'accorder les modes d'utilisations (debug avec debug etc)...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par farscape Voir le message
    si tu es en mode dll partagée ça ne peut fonctionner puisque tu auras une partie en debug et une autre en release.
    en statique (/MT) ça devrait etre mieux, mais bon il est préférable d'accorder les modes d'utilisations (debug avec debug etc)...
    Je vais tenter d'exploiter ta piste ... mais juste pour préciser (en fait voir si j'ai compris) .. tu dis que j'utilise ma dll en mode dynamique et qu'il faudrait que je l'utilise en mode statique. C'est ca ?
    Dans ce cas on ne fait qu'une seule .lib je crois ... mais le malheur c'est pour que quelques dizaines de lignes de codes (mais qui utilisent des string, des iostream ....) je passe de 35Ko à 300 ou 400 Ko. En gros j'embarque la moitié du compilateur avec moi

    Autrement un lien des plus intérressants sur le sujet du code qui marche en debug et pas en release :
    http://www.codeproject.com/KB/debug/...eleasever.aspx

    @+++

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Citation Envoyé par squale69 Voir le message
    Bonjour,

    Si je compile la DLL en mode release, et que je l'utilise dans le projet qui reste en mode debug une partie du code seulement fonctionne (par exemple le constructeur de ma class, mais pas ma procédure).
    Normal...

    Car le code généré en mode debug et release n'est pas le même !

    Il ne faut surtout pas en C++ mélanger les modes à cause de new et delete dont l'implémentation (heap manager) ne sont pas les mêmes en debug et release
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Points : 41
    Points
    41
    Par défaut
    J'ai mis la main sur le problème à force de regarder le code généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    __declspec(dllimport) void Gestion_parametres_globaux(
    const std::string& nom_fichier, T_Parametre* Parametres);
    ....
    ....
    T_Parametre* Parametres = new(T_Parametre);
    .....
    Gestion_parametres_globaux("Cible.conf", Parametres);
    Si je suis en debug, mon string est bien récupéré et du coup tout fonctionne, mais si j'ai la DLL en mode release mon string devient n'importe quoi : le contenu devient "Hs5zCible.conf" avec une longueur en milliers de caractères ... bref le bronx, je ne pointe plus sur la bonne sructure, et ce dès l'entrée dans la procédure. Par contre le pointeur Parametres est OK.

    Ca me dépasse, je n'arrive plus à comprendre si c'est parce que je mélange du debug et du release, du code managé avec du non-managé, pour je ne sais trop quelles options de l'environnement de compil ou de link ...

    Vous ne voyez pas une astuce pour forcer l'empilement des paramètres de la même façon dans les 2 cas ?
    Au secours !!!

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/03/2009, 11h09
  2. Dll en mode debug et release
    Par babar63 dans le forum C++
    Réponses: 12
    Dernier message: 18/02/2008, 20h27
  3. Savoir le mode : debug ou release
    Par BruceBoc dans le forum C++
    Réponses: 8
    Dernier message: 24/04/2007, 00h09
  4. Difference Mode debug et release
    Par balabi dans le forum MFC
    Réponses: 3
    Dernier message: 16/06/2005, 11h30
  5. chargement DLL mode debug/release
    Par bihorece dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/06/2004, 14h05

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