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 :

[MFC] Impossible de supprimer une fonction que j'ai rajouté


Sujet :

MFC

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut [MFC] Impossible de supprimer une fonction que j'ai rajouté
    Slt,

    Farscape m'a filé un code qui marchait maisdont je n'ai plus besoin à présent,
    il s'agissait de la redefinition de DoModal

    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
    20
    21
    22
    23
    24
    25
    26
    int CDigiDialog::DoModal()
    {
       CDialogTemplate dlgTemp;
       int             nResult;
     
       // lecture du template d'origine
       if (!dlgTemp.Load(MAKEINTRESOURCE(IDD))) return -1;
     
       // fonte par defaut
       dlgTemp.SetFont("MS Sans Serif", 8);
     
       // pointeur sur le dialogue template modifié
       LPSTR pdata = reinterpret_cast<LPSTR>(GlobalLock(dlgTemp.m_hTemplate));
     
       m_lpszTemplateName = NULL;
       InitModalIndirect(pdata);
     
       // appel DoModal
       nResult = (int) CDialog::DoModal();
     
       // liberation du template modifié
       GlobalUnlock(dlgTemp.m_hTemplate);
     
       return nResult;
     
    }
    je met maintenant en commentaire la fonction ainsi que son prototype

    j'ai fais un clean car j'avais des soucis de link vers le DoModal

    et la plus moyen de lancer mon appli, des que je la lance, j'obtiens :

    Program: ... documents\Test\Debug\Test.exe
    File: dlgcore.cpp
    Line: 485
    Ca peut venir d'ou à votre avis ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut Re: [MFC] Impossible de supprimer une fonction que j'ai raj
    Citation Envoyé par firejocker
    Program: ... documents\Test\Debug\Test.exe
    File: dlgcore.cpp
    Line: 485
    Ca peut venir d'ou à votre avis ?
    Euh ... c'est un message d'erreur ça ? y'a rien dautre a coté du genre invalide type ... enfin un VRAI message d'erreur ? t'utilise quel compilateur ?
    car a vrai dire on risque d'avoir du mal a t'aider ...
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    Autant pour moi,

    donc avant de cleaner ma solution, j'ai cette erreur de compilation :
    DlAnimAttente.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall CDigiDialog:oModal(void)" (?DoModal@CDigiDialog@@UAEHXZ)
    apres le clean, c'est à l'execution
    ---------------------------
    Microsoft Visual C++ Debug Library
    ---------------------------
    Debug Assertion Failed!

    Program: ... documents\Test\Debug\Test.exe
    File: dlgcore.cpp
    Line: 485

    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.

    (Press Retry to debug the application)
    ---------------------------
    Abandonner Recommencer Ignorer
    ---------------------------

  4. #4
    Nouveau membre du Club Avatar de nmarf
    Inscrit en
    Mai 2003
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 92
    Points : 39
    Points
    39
    Par défaut
    Vérifie peut-être tous les appels à cette fonction DoModal().
    Regarde s'il n'y a rien dans le .h qui s'y rapporte.
    Regarde aussi s'il n'y a pas de liens existants avec le ClassWizard (CTRL+w -> Onglet Message Maps -> Fenêtre Member Functions -> rechercher DoModal

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    ouai a mon avis on dirait un probleme de fonction declarer dans le .h mais non defini.
    et ensuite a l'execution utilise des breakpoint pour debugger "pas à pas" ton application merci de nous indiquer l'endroit ou l'erreur est lancée.
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    je l'ai supprimé du point h aussi

    cette classe derive de CDialog :
    class CDigiDialog : public CDialog
    donc, une fois DoModal supprimé tout appel à DoModal devrait appeler celle de CDialog normalement, non ?

    Regarde aussi s'il n'y a pas de liens existants avec le ClassWizard (CTRL+w -> Onglet Message Maps -> Fenêtre Member Functions -> rechercher DoModal
    Dans Visual C++ .Net [Ctrl + W] ca fais rien

  7. #7
    Nouveau membre du Club Avatar de nmarf
    Inscrit en
    Mai 2003
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 92
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par firejocker
    Dans Visual C++ .Net [Ctrl + W] ca fais rien
    Je ne connais pas les raccourcis pour Visual.net (j'utilise Visual Studio 6) mais il est sûr que tu dois avoir un équivalent au Class Wizard (peut-être même qu'il s'appellle comme ça).
    [edit]Ah ben non... désolé

  8. #8
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    En effet, il n'y a pas de class wizzard (ctrl+w) dans visual .net.
    Fait une recherche sur tout ton projet sur "DoModal", il y apeut-être des déclarations qui trainent...
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    nan, ca j'ai deja fais,

    c'est les seules definitions de domodal et je les met en commentaire

  10. #10
    Nouveau membre du Club Avatar de nmarf
    Inscrit en
    Mai 2003
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 92
    Points : 39
    Points
    39
    Par défaut
    As-tu essayé de ne mettre en commentaire que le contenu de la fonction ?

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    ouep, deja testé,
    j'ai remplacé son contenu par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (int) CDialog::DoModal();
    ca me plante de la meme façon

  12. #12
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par firejocker
    apres le clean, c'est à l'execution
    ---------------------------
    Microsoft Visual C++ Debug Library
    ---------------------------
    Debug Assertion Failed!

    Program: ... documents\Test\Debug\Test.exe
    File: dlgcore.cpp
    Line: 485

    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.

    (Press Retry to debug the application)
    ---------------------------
    Abandonner Recommencer Ignorer
    ---------------------------
    Quand tu remonte la call stack, tu tombe sur quelle ligne de code?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  13. #13
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Quand tu remonte la call stack, tu tombe sur quelle ligne de code?
    Comment on fait ca ?

  14. #14
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Quand ton prog plante, tu dois avoir le choix entre 'continue' et 'break'. Tu fais break. Et puis tu ouvre la fenêtre 'call stack' (ou 'pile d'appels' si tu as visual en français). Pour ouvrir cette fenetre, tu vas dans view/other windows/call stack.
    Là, tu va avoir (classé par ordre chronologique, de dernier appel étant en haut de la pile) les appels de tes fonctions. Tu remontes jusqu'au premier appel d'une fonction à toi (tu verras, il y a aura certainement tout un tas de fonctions auxquelles tu n'aura pas accès. Enfin si, mais uniquement au code asm...). Et là tu va tomber sur l'appel qui fait planter.
    Une fois que tu as localisé cette ligne de code, le mieux est de mettre un point d'arrêt ici, de relancer le programme, et de regarder ce qu'il se passe à cet endroit.

    Hope it helps.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  15. #15
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    le "Call Stack" etait dans le menu : Debug / Windows / Call Stack

    sinon, ben ca m'aide pas en fait,

    le soft plante lors de l'appel du premier DoModal (celui qui lance mon appli)

    dans l'InitInstance() du CPP principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	CDlAccueil dlg;
    	m_pMainWnd = &dlg;
    	INT_PTR nResponse = dlg.DoModal();

    les definitions :

    class CDlAccueil : public CDigiDialog

    class CDigiDialog : public CDialog

  16. #16
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par firejocker
    le "Call Stack" etait dans le menu : Debug / Windows / Call Stack
    Oui, quand tu es en cours d'exécution. Pardon de ne pas avoir précisé.

    Citation Envoyé par firejocker
    le soft plante lors de l'appel du premier DoModal (celui qui lance mon appli)
    Si tu pose un point d'arret sur le DoModal, et que tu fais F11, tu arrives où?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  17. #17
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    dans dlgcore.cpp etca plante à la premiere ligne sur l'ASSERT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INT_PTR CDialog::DoModal()
    {
    	// can be constructed with a resource template or InitModalIndirect
    	ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
    		m_lpDialogTemplate != NULL);

  18. #18
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    1/ Quand tu est dans le DoModal, jette un coup d'oeil sur le this, voir s'il ya quelque chose de flagrant qui ne va pas.

    2/ lequel de m_lpszTemplateName, m_hDialogTemplate et m_lpDialogTemplate est == NULL?

    Je pense que tu as dû supprimer une ligne de trop dans le code généré automatiquement par l'ide.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  19. #19
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    1) au niveau du this : tous est à 0x00000000

    2) les 3

  20. #20
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Pfff, je sais pas...
    vas-y, balance les .h et les constructeurs de tes 2 dialogs qui héritent de CDialog.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. impossible de supprimer une image!
    Par pierrot67 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/09/2006, 15h03
  2. Réponses: 1
    Dernier message: 30/12/2005, 17h14
  3. [MFC] Arreter execution d'une fonction
    Par ricky78 dans le forum MFC
    Réponses: 1
    Dernier message: 07/11/2005, 15h52
  4. impossible de supprimer une imprimate réseau
    Par sony351 dans le forum Administration
    Réponses: 4
    Dernier message: 27/10/2005, 12h30
  5. DAO impossible d'utiliser une fonction dans un requete
    Par exter666 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/09/2005, 17h15

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