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

MFC Discussion :

DoModal fait bugger mon programme


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Points : 54
    Points
    54
    Par défaut DoModal fait bugger mon programme
    Ca va être dur à expliquer.

    Prérequis:

    -outil: VC6

    -Détail:

    *J'ai un formulaire form1 qui possède 1 boutons, b1 et une listbox l1
    *Lors du clique sur b1, un Dialog dial1 s'ouvre avec DoModal
    *Lors du double clik sur l1, un Dialog dial2 s'ouvre avec DoModal

    Sur dial1, un double clik sur un listbox ouvre dial2
    Sur dial2, un double clik sur une listbox ouvre dial3

    Je précise celà pour de bonnes raisons.

    En effet,
    Si je passe par ce chemin,
    Form1
    ---->double click l1
    ----->DoModal : dial2
    ----->double click sur listeBox
    ----->DoModal : dial3

    Ca marche

    En revanche,
    Form1
    ---->click b1
    ----->DoModal : dial1
    ----->double click sur listeBox
    ----->Erreur ( runtime error ou access violation)

    Avec le debugger, j'ai trouvé l'erreur dans DoModal.
    J'ai eu plusieurs message différents dont je ne sais à quoi est du la variation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||m_lpDialogTemplate != NULL);
    le debugger me positionne sur cette ligne.

    pour le test j'ai utilisé ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CDialog dlg;
    dlg.DoModal();
    ça plante

    Je sais vraiment pas où se trouve le manque ou l'erreur

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    Salut,

    Je vais peut-être paraître un peu sévère mais j'ai rien compris à ton explication. Est ce qu'il serait possible de la restructurer en décrivant la marche suivie boite de dialogue par boite de dialog ?


    merci
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  3. #3
    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
    Citation Envoyé par hiko-seijuro
    Salut,

    Je vais peut-être paraître un peu sévère mais j'ai rien compris à ton explication. Est ce qu'il serait possible de la restructurer en décrivant la marche suivie boite de dialogue par boite de dialog ?


    merci
    +1,
    de toute façon un plantage dans domodal implique la plupart du temps un probleme avec les controles:
    probleme qui survient dans dodataexchange ou il faut mettre un point d'arret et suivre le deroulement pas a pas.
    autre point je suis sur que dans le panneau debug tu as un message décrivant le probleme.

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Points : 54
    Points
    54
    Par défaut
    bien sur, je peux réexpliquer. je savais que j'aurai du mal à l'expliquer.
    Mais grace à farscape j'ai réussi à régler le problème.
    J'ai placé un poin d'arrêt dans dodataexchange qui m'a emmené
    jusque dans initdialog et là j'avais un bug que j'air ésolu.

    Pour plus de détail et puis si quelqu'un en a besoin plus pour plus tard.

    J'ai un dialogue d1 qui a 2 boutons ouvrant chacun un autre dialogue,
    d2 et d3.
    Sur le dialogue d2 j'ai un bouton qui ouvre aussi le dialogue d3

    donc je peux atteindre d3 par 2 chemins:
    d1--->clique sur le bouton b1--->d3
    d1--->clique sur le bouton b2--->d2--->clique sur le bouton b3--->d3

    J'ouvre les dialog grace à DoModal.

    Problème : Quand je cliquais sur b3, il se produisait une erreur.

    En plaçant un point d'arrêt juste sur DoModal je n'arrivais pas
    à atteindre l'erreur.
    En le plaçant, sur le DoDataDexchange de la classe associée au
    dialogue 3, cela m'a permis de trouver le bug.

    En faisant défiler le debugger, je suis passé de CDial3:oDataExchange
    à CDial3::OnInitDialog dans laquelle se trouvait mon erreur.

    Une variable non instancié en était la cause.

    Merci pour cette aide à l'instinct
    J'espère avoir été moins flou.

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

Discussions similaires

  1. [Débutant] FileSystemWatcher: Chemin d'accès trop long fait planter mon programme.
    Par BasicZX81 dans le forum VB.NET
    Réponses: 6
    Dernier message: 18/06/2015, 19h24
  2. Réponses: 4
    Dernier message: 21/01/2010, 04h12
  3. Réponses: 2
    Dernier message: 27/04/2009, 13h09
  4. Réponses: 2
    Dernier message: 17/03/2007, 13h43
  5. Réponses: 13
    Dernier message: 02/11/2006, 15h12

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