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 :

Probleme pour modifier des CONTROLs en Release


Sujet :

MFC

  1. #1
    Membre �m�rite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par d�faut Probleme pour modifier des CONTROLs en Release
    Bonjour,

    En mode release, j'ai un plantage de l'application (1 fois sur 2) que je ne retrouve pas en mode debug (apparemment)!

    J'ai t�ch� de me rapprocher par dichotomie au plus pr�s de l'erreur et apparemment elle se situerait au niveau de la ligne de code en gras.
    Voici le code de la fonction qui plante:
    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
    27
    bool X::TraiterEtape5()
    {
    	bool ret = false;
    
    	//Affichage de la proc�dure
    	ChargerFicProcedure();
    
    	//On fournit le HANDLE de la fen�tre pour l'�change de message
    	CManipDlg *manipDlg = reinterpret_cast<CManipDlg *>(m_apDlg);
    	manipDlg->InitManip(m_hWnd, m_Step);
    	
    //	TraiterEtape5_1(manipDlg);
    //	TraiterEtape5_2(manipDlg);
    	
    	manipDlg->SetDlgItemText(IDC_STATIC_ETAT_OP,"R�sultat de la VBF");
    
    	GetDlgItem(IDC_BUTTON_SUIV)->EnableWindow(TRUE);
    	GetDlgItem(IDC_BUTTON_GO)->ShowWindow(FALSE);
    			
    	m_ButtonSuiv.SetTextColor(RGB(0,150,0));
    	::SetEvent(m_hEventBlink);
    	m_nTimer = SetTimer(2, 600, NULL);
    
    	ret = true;
    
    	return ret;
    }
    Je fournis aussi le code de la fonction InitManip():
    void CManipDlg::InitManip(HWND hWnd, UINT step)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    {
    	g_hWndMain = hWnd; 	 //variable statique -> globale à la classe
    	g_nStep = step;		//variable statique -> globale à la classe
    }
    o� la classe CManipDlg, d�riv�e de CDialog, est charg�e dynamiquement par la classe CXDlg.
    J'ai �t� aussi oblig� d'utiliser des variables statiques pour la classe CManipDlg car sur l'action d'un control, mes variables n'�taient pas initialis�es aux valeurs pass�es via la fonction InitManip();
    Je pense que mon probl�me vient de l� mais je ne sais pas comment y rem�dier...Il me faudrait surement r�cup�rer correctement le handle de la fen�tre fille...

    D'apr�s le debbugger, j'ai le message suivant:
    Exception non g�r�e � 0x5f4365c6 (MFC42D.DLL) dans X.exe:0xC0000005: Violation d'acc�s lors de la lecture de l'emplacement 0x00000020.
    et la variable locale this � NULL(this 0x00000000 {CWnd hWnd=???} CWnd * const)
    L'erreur se situe dans WINNOC.cpp � la ligne suivante:
    ASSERT(::IsWindow(m_hWnd));
    ...Arf!!!

    Nicolas

  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
    Par d�faut
    salut,
    je dirai que le test de la valeur de manipDlg s'impose, 0x20 c'est blanc en ascii, ta valeur n'est pas du tout valide..

  3. #3
    Membre �m�rite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par d�faut
    Citation Envoy� par farscape
    je dirai que le test de la valeur de manipDlg s'impose, 0x20 c'est blanc en ascii, ta valeur n'est pas du tout valide..
    C'est clair!

    En fait, le probl�me venait du fait que je faisais un PostMessage() au lieu d'un SendMessage()...Donc selon si le message �tait trait� avant ou apr�s, mon pointeur sur CDialog �tait initialis� ou non...

    Bon we
    Nicolas

  4. #4
    Expert confirm�
    Avatar de Mat.M
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 539
    Par d�faut
    J'ai l'impression que c'est incroyablement compliqu� pour peu de choses..
    >>
    CManipDlg *manipDlg = reinterpret_cast<CManipDlg *>(m_apDlg);
    est-ce que les variables manipDlg ,m_apDlg sont bien initialis�es c.ad. !=NULL ?
    Reprenons depuis le d�but que veux-tu faire ? Afficher une fen�tre dialogue modale , non modale ?

  5. #5
    Membre �m�rite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par d�faut
    Citation Envoy� par Mat.M
    J'ai l'impression que c'est incroyablement compliqu� pour peu de choses..
    >>
    CManipDlg *manipDlg = reinterpret_cast<CManipDlg *>(m_apDlg);
    est-ce que les variables manipDlg ,m_apDlg sont bien initialis�es c.ad. !=NULL ?
    Reprenons depuis le d�but que veux-tu faire ? Afficher une fen�tre dialogue modale , non modale ?
    En fait, c'est r�solu le probl�me, comme je disais dans mon post pr�c�dent, c'�tait un probleme au niveau de l'envoie d'un message pour le chargement d'une fen�tre fille dynamiquement. Vu que j'utilsais PostMessage(), m_apDlg n'�tait pas forc�ment initialis�e au moment ou je l'utilisais. Avec SendMessage(), plus de soucis d'initialisation de mon pointeur sur CDialog puisque le message est forc�ment trait� avant de passer � la suite de l'application.

    Nicolas

Discussions similaires

  1. R�ponses: 7
    Dernier message: 10/03/2015, 14h00
  2. R�ponses: 1
    Dernier message: 20/08/2009, 12h12
  3. R�ponses: 7
    Dernier message: 16/04/2005, 08h55
  4. [NetBeans 4.0 Beta 2]Probleme pour monter des jars
    Par nicoo dans le forum NetBeans
    R�ponses: 2
    Dernier message: 19/11/2004, 14h14
  5. R�ponses: 5
    Dernier message: 07/07/2004, 16h05

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